<?php
//20140415BM force commit svn resolved libamap.php
// définit les 3 octets d'en-tête d'un fichier texte encodé en UTF-8
// define("CODE_UTF8", pack("ccc", 0xef, 0xbb, 0xbf));

class amap {
var $adExiste; // Indique si l'adhérent est en base
var $adLoggue; // Indique si l'utilisateur est loggué
var $adherent; // la fiche adhérent

var $listePeriodesAdhesion; // liste des périodes d'adhésions futur, courante et passée
var $listeAdhesions; // liste des adhésions de l'adhérent

var $periodeAdhesionCourante; // la période d'adhésion courante
var $periodeAdhesionFutur; // prochaine période d'adhésion

var $adhesion; // l'adhésion pour la période courante
var $adhesionFutur; // l'adhérent a une adhésion la période futur (bool)

var $aboSouscrit; // Les abonnement souscrits
var $aboPropose; // les abonnements non souscrits

var $adEstAbonne; // indique si l'adhérent est abonné à l'abonnement sélectionné
var $aboadherent; // la souscription à l'abonnement sélectionné

var $listeDistrib; // liste des distributions d'un abonnement

var $listeOrphDistrib; // liste des paniers orphelins d'une distribution
var $listOrphAdopte; // liste des paniers orphelins ayant trouvé un adoptant
var $listeAdoptantPanierAd; // liste des adoptants pour le panier de l'adhérent
var $listeOrphAdopteAd; // liste des paniers orphelins adopté par l'adhérent

var $listeEquipeDistrib; // liste des inscrits pour l'équipe de distribution

var $listeDatesReport; // liste des dates à laquelle on peut report le panier de la distribution courante

var $gestAnnee; // l'année de référence pour la gestion des adhérents
var $gestAdherentsV; // la liste de tous les adherents Validé avec leurs adhésion pour la période
var $gestAdherentsI; // la liste de tous les adherents à valider avec leurs adhésion pour la période

var $gestAboEncours; // la liste des abonnements souscrits avec le statut encours
var $gestAboListe; // la liste des abonnements souscrits avec le statut list
var $gestAboAbandonne; // la liste des abonnements souscrits avec le statut abandonnée
var $gestAboInvalide; // la liste des abonnements souscrits avec le statut invalide

var $formulaire;
var $tableau;

function init() {

$mainframe=& JFactory::getApplication();
//20140328BM pour la persisteence de l'adherent dans le menu déroulant des permanences par délégation
$option = JRequest::getCmd('option');
$database =& JFactory::getDBO();
$my =& JFactory::getUser();

if ($my->id == 0) { // Utilisateur pas authentifié
echo 'Vous devez être authentifié pour accéder à ces pages';
$this->adLoggue = FALSE;
} else {
// l'utilisateur est authentifié
$this->adLoggue = TRUE;

// si la gestion est effectué par l'adhérent effectivement loggué alors charger la fiche normalement
if($mainframe->getUserState("amap_idag", 0) == 0 || JRequest::getVar('idag', 0) != 0)
{
// recupère les informations d'un adhérent en fonction de son indentifiant Joomla
$query = "SELECT * FROM amap_adherent where IDJ = ".$my->id;
$database->setQuery($query);
$database->query(); if ($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg();}

if ($database->getNumRows() == 0) { // on n'a pas trouvé d'abonnement rattaché, on cherche un qui correspond (email identiques)
$query = "SELECT * FROM amap_adherent where email = '".$my->email."'";
$database->setQuery($query);
$database->query(); if ($database->getErrorNum()){echo 'Erreur ' .$database->getErrorNum().': '.$database->getErrorMsg().'<Br />';}
if ($database->getNumRows() == 0) { // on a pas trouvé
$this->adExiste = FALSE;
} else {
$query = "UPDATE amap_adherent SET IDJ =".$my->id." WHERE email ='".$my->email."';";
$database->setQuery($query);
$database->query(); if ($database->getErrorNum()) { echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<Br />';}

message("Un abonnement avec votre email a été trouvé, il vous a été attribué");

$this->adExiste = TRUE;
$mainframe->setUserState('amap_ida', $this->adherent['IDA']);

// recupère les informations d'un adhérent en fonction de son indentifiant Joomla
$query = "SELECT * FROM amap_adherent where IDJ = ".$my->id;
$database->setQuery($query);
$database->query(); if ($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg();}
}

} else {
// l'adhérent existe en base
$this->adExiste = TRUE;
}

if($this->adExiste){
// charge la fiche de l'adhérent
$this->adherent = $database->loadAssoc();

// ida en variable de session
$mainframe->setUserState('amap_ida', $this->adherent['IDA']);



// ******************************** déterminaton des droits
// Droit de gestion des adhésions (Param1)
$query = "SELECT * FROM amap_adherentpermission where Param1 = 1 AND IDA = ".$this->adherent['IDA'];
$database->setQuery($query);
$database->query(); if ($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg();}
if ($database->getNumRows() == 0) {
$mainframe->setUserState("amap_droitAd", FALSE);
} else {
$mainframe->setUserState("amap_droitAd", TRUE);
}
// Droit de gestion des abonnements (Param2)
$query = "SELECT * FROM amap_adherentpermission where Param2 = 1 AND IDA = ".$this->adherent['IDA'];
$database->setQuery($query);
$database->query(); if ($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg();}
if ($database->getNumRows() == 0) {
$mainframe->setUserState("amap_droitAbo", FALSE);
} else {
$mainframe->setUserState("amap_droitAbo", TRUE);
}

// ******************************** gestion par tiers
// si l'adhérent effectivement loggué a les droits de gestion des adhésions
if($mainframe->getUserState("amap_droitAd")){
// est-ce que l'identité de l'adhérent dont on effectue la gestion est différente de l'identité de l'adhérent effectivement loggué
if(JRequest::getVar('idag', 0) != 0 && JRequest::getVar('idag') != $this->adherent['IDA']){

$idag = JRequest::getVar('idag');
// cette requête permet à la fois de vérifier que l'ida passé en paramètre existe et de récupérer le nom et prénom de l'adhérent dont on veut effectuer la gestion
$query = "SELECT concat(Nom,  Prenom) FROM amap_adherent WHERE IDA = ".$idag;
$database->setQuery($query);
$database->query(); if ($database->getErrorNum()){echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg();};
// l'adhérent a été trouvé
if($database->getNumRows() == 1){
$resultat = $database->loadRow();
// idag prend la valeur de l'ida de l'adhérent effectivement loggué et permet d'effectuer la gestion à sa place
$mainframe->setUserState("amap_idag", $idag);
$mainframe->setUserState("amap_nomg", $resultat[0]);
}
else
{
// si on a pas trouvé d'adhérent et que l'ida en paramètre vaut 0 alors cela veut dire qu'on quitte le mode gestion par tiers
if($idag == 0)
{
$mainframe->setUserState("amap_idag", 0);
$mainframe->setUserState("amap_idag", "");
}
}
}
}
}
}
else
{
// la gestion est effectué par un tiers donc l'adhérent existe forcément
$this->adExiste = TRUE;
}

if ($this->adExiste){

// En tete visibles sur toutes les pages
echo '<div id="amap_header">';
echo '<table width="100%">';
//20131126BM
echo '<tr><td>';
//~ echo '<p>'.$my->username."</b> : Bienvenu(e) sur le site de gestion de l'AMAP.";
$pathway =& $mainframe->getPathway();
$pathway->addItem('Gestion AMAP', 'index.php?option=com_amap');

// affichage des droits
if($mainframe->getUserState("amap_droitAd") || $mainframe->getUserState("amap_droitAbo")){
//20131126BMecho " Vous avez les droits pour gérer : ";
if($mainframe->getUserState("amap_droitAd")){
//20131126BM echo " les <strong>adhésions</strong>";
}
if($mainframe->getUserState("amap_droitAd") && $mainframe->getUserState("amap_droitAbo")){
//20131126BM echo " et ";
}
if($mainframe->getUserState("amap_droitAbo")){
//20131126BM echo " les <strong>contrats</strong>";
//echo "<br>Pour celà, rendez vous en bas de la page 'Mon compte'.";

}
}
//echo "<br>Pour celà, rendez vous en bas de la page 'Mon compte'.";
// affichage de l'identité prise si c'est le cas
if($mainframe->getUserState("amap_idag") != NULL){
echo '<div style="" class="amap_alert">
<table width="100%" border="0" cellpadding="10"><tr>
<td valign="top" style="font-size: 1.2em;"><img src="components/com_amap/images/bullet_error.png" width="64" align="left">Vous êtes sous l\'indentité de <strong style="color: red;">'.FormatNomsAdh($mainframe->getUserState("amap_nomg", "")).'</strong></td>
<td width="100" align="center" style="font-size: 0.9em;"><a href="index.php?option=com_amap&amp;task=retroceder"><img src="components/com_amap/images/lock_unlocked.png" width="36"><br/>Revenir sous mon indentité</a></td>
</tr></table>';
} else {
echo '</td>';
}

echo '</tr></table>';
echo '</div>';

// si l'adhérent est géré par un tiers alors charger la fiche de l'adhérent dont on effecture la gestion
if($mainframe->getUserState("amap_idag", 0) > 0)
{
$query = "SELECT * FROM amap_adherent WHERE IDA = ".$mainframe->getUserState("amap_idag", 0);
$database->setQuery($query);
$database->query(); if ($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg();}
$this->adherent = $database->loadAssoc();
$mainframe->setUserState('amap_ida', $this->adherent['IDA']);
}

// ******************************** chargement des différents statut d'adhésion pour les différentes périodes
$query = "SELECT * FROM amap_periodeadhesion";
$database->setQuery($query);
$database->query(); if ($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg();}
$this->listePeriodesAdhesion = $database->loadAssocList();

// cherche la période d'adhésion courante
foreach($this->listePeriodesAdhesion as $periode) {
if($periode['Statut'] == 'courant') {
$this->periodeAdhesionCourante = $periode['Periode'];
}
}

// cherche la période d'adhésion futur
foreach($this->listePeriodesAdhesion as $periode) {
if($periode['Statut'] == 'futur'){
$this->periodeAdhesionFutur = $periode['Periode'];
}
}
//20140411BM
$ida=$this->adherent['IDA'];
// charge les adhésions effectués par l'adhérent
$query = "SELECT * FROM amap_adhesion WHERE IDA = ".$this->adherent['IDA'];
$database->setQuery($query);
$database->query(); ; if ($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg();}
$this->listeAdhesions = $database->loadAssocList();

// cherche une adhésion correspondante à la période d'adhésion courante
foreach($this->listeAdhesions as $adhesion){
if($adhesion['Periode'] == $this->periodeAdhesionCourante) {
$this->adhesion = $adhesion;
}
}

// cherche une adhésion correspondante à la période d'adhésion futur
foreach($this->listeAdhesions as $adhesion){
if($adhesion['Periode'] == $this->periodeAdhesionFutur) {
$this->adhesionFutur = $adhesion;
}
}

// ******************************** chargement des différents abonnement souscrit et ceux a souscrire
$idtab = JRequest::getVar('idtab', '');
$critere = JRequest::getVar('critere', '');
$ordre = JRequest::getVar('ordre', '');

// abonnements souscris
$query = " SELECT amap_abonnement.Nom, amap_abonnement.Produit, REPLACE(amap_abonnement.Societe, ' - ', '<br>') as Societe, amap_abonnementadherent.Commentaire, CASE amap_abonnementadherent.Statut
WHEN 'Encours' THEN 'En cours'
WHEN 'Liste' THEN 'Liste d\'attente'
WHEN 'Abonne' THEN 'Abonné'
WHEN 'Invalide' THEN 'Invalide'
END as Statut
FROM amap_abonnement, amap_abonnementadherent
WHERE amap_abonnement.Nom = amap_abonnementadherent.NomAbonnement
AND amap_abonnement.Statut != 'Clot'
AND amap_abonnementadherent.IDA = ".$this->adherent['IDA'];

// gestion du tri
if($idtab == 'aboSouscrit'){
$query .= ' ORDER BY '.$critere.' '.$ordre;
} else {
$query .= ' ORDER BY 1 ASC';
}

//echo "<br>$query <br>";
$database->setQuery($query);
$database->query(); if ($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}

if ($database->getNumRows() != 0) {
$this->aboSouscrit = new tableau ;
$this->aboSouscrit->table = $database->loadAssocList('Nom');

//~ Remise en forme du statut
foreach ($this->aboSouscrit->table as $key => $tab) {
// if ($tab["Statut"] == "En cours") $this->aboSouscrit->table[$key]["Statut"] = '<div align="center"><img src="components/com_amap/images/bullet_acceptLocked.png" width="36" /></div>';
// if ($tab["Statut"] == "En cours") $this->aboSouscrit->table[$key]["Statut"] = "<a href='index.php/component/amap/?view=abocomadherentldb&amp;abo=".$this->aboSouscrit->table[$key]['Nom']."&amp;ida=$ida'</a><center>modifier</center>" ;
if ($tab["Statut"] == "En cours") $this->aboSouscrit->table[$key]["Statut"] = '<a href="index.php/component/amap/?view=abocomadherentldb&amp;abo='.$this->aboSouscrit->table[$key]['Nom'].'&amp;ida='.$ida.'"><div align="center" ><img src="components/com_amap/images/file_edit.png" title="modifier les quantités pour ce contrat" alt="modifier ce contrat" width="36"></div></a>';
if ($tab["Statut"] == "Abonné") $this->aboSouscrit->table[$key]["Statut"] = '<div align="center"><img src="components/com_amap/images/file_accept.png" width="36" title="Ce contrat a été validé par une personne relais. Il n\'est plus modifiable par l\'adhérent: demander à la personne relais si nécesssaire." /></div>';
}
$this->aboSouscrit->header[0] = 'Nom';
$this->aboSouscrit->largeur[0] = "20%";
$this->aboSouscrit->header[1] = 'Produit(s)';
$this->aboSouscrit->largeur[1] = "15%";
$this->aboSouscrit->header[2] = 'Producteur';
$this->aboSouscrit->header[3] = 'Commentaire';
$this->aboSouscrit->header[4] = 'Statut';

// gestion du tri
$this->aboSouscrit->idtab = 'aboSouscrit';
$this->aboSouscrit->url = 'index.php?option=com_amap&amp;view=advoircontrats';

if($idtab == 'aboSouscrit'){
$this->aboSouscrit->critereTri = $critere;
$this->aboSouscrit->ordreTri = $ordre;
} else {
$this->aboSouscrit->critereTri = 1;
$this->aboSouscrit->ordreTri = 'asc';
}
}

// abonnements proposés
$query = " SELECT Nom, produit, REPLACE(societe, ' - ', '<br>')
FROM amap_abonnement WHERE Nom NOT IN (SELECT NomAbonnement FROM amap_abonnementadherent WHERE IDA = ".$this->adherent['IDA'].")
AND Statut != 'Clot' AND Statut != 'Complet' ";

// gestion du tri
if($idtab == 'aboDispo'){
$query .= ' ORDER BY '.$critere.' '.$ordre;
} else {
$query .= ' ORDER BY 1 ASC';
}

$database->setQuery($query);
$database->query(); if ($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}

if ($database->getNumRows() != 0) {
$this->aboPropose = new tableau ;
$this->aboPropose->table = $database->loadAssocList('Nom');
$this->aboPropose->header[0] = 'Nom';
$this->aboPropose->largeur[0] = "20%";
$this->aboPropose->header[1] = 'Produit(s)';
$this->aboPropose->largeur[1] = "15%";
$this->aboPropose->header[2] = 'Producteur';


// gestion du tri
$this->aboPropose->idtab = 'aboDispo';
$this->aboPropose->url = 'index.php?option=com_amap&amp;view=advoircontrats';

if($idtab == 'aboDispo'){
$this->aboPropose->critereTri = $critere;
$this->aboPropose->ordreTri = $ordre;
} else {
$this->aboPropose->critereTri = 1;
$this->aboPropose->ordreTri = 'asc';
}
}
//fin de abonnement proposes

//20131204BM
// abonnements tous
//20140408BM j'ai enlevé != Complet car n'affiche plus les pointages producteurs pour la campagne en cours pour les contrats Complets
//$query = " SELECT Nom, produit, REPLACE(societe, ' - ', '<br>') FROM amap_abonnement WHERE Statut != 'Clot' AND Statut != 'Complet' ";
$query = " SELECT Nom, produit, REPLACE(societe, ' - ', '<br>') FROM amap_abonnement WHERE Statut != 'Clot' ";
// gestion du tri
if($idtab == 'aboDispo'){
$query .= ' ORDER BY '.$critere.' '.$ordre;
} else {
$query .= ' ORDER BY 1 ASC';
}

$database->setQuery($query);
$database->query(); if ($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}

if ($database->getNumRows() != 0) {
$this->aboTous = new tableau ;
$this->aboTous->table = $database->loadAssocList('Nom');
$this->aboTous->header[0] = 'Nom';
$this->aboTous->header[1] = 'Produit(s)';
$this->aboTous->largeur[1] = "15%";
$this->aboTous->header[2] = 'Produccteur';


// gestion du tri
$this->aboTous->idtab = 'aboTous';
$this->aboTous->url = 'index.php?option=com_amap&amp;view=advoir';

if($idtab == 'aboDispo'){
$this->aboTous->critereTri = $critere;
$this->aboTous->ordreTri = $ordre;
} else {
$this->aboTous->critereTri = 1;
$this->aboTous->ordreTri = 'asc';
}
}
//fin de 20131204BM


// lorsqu'un abonnement est passé en paramétre : Recherche des caractéristique de l'abonnement sélectionné ainsi que de la souscription de l'adhérent pour cet abonnement---------------
$abo = JRequest::getVar('abo', '');
if ($abo != '') {
$query = "SELECT * FROM amap_abonnement where nom = '".$abo."'";
$database->setQuery($query);
$database->query(); if ($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg();}
if ($database->getNumRows() == 0) { // on n'a pas trouvé d'abonnement
echo "Abonnement inconnu";
} else {
$mainframe->setUserState("amap_abonnement", $database->loadAssoc());
}

$query = "SELECT * FROM amap_abonnementadherent where NomAbonnement = '".$abo."' AND IDA = ".$this->adherent['IDA'];
$database->setQuery($query);
$database->query(); if ($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg();}
if ($database->getNumRows() == 0) { // on n'a pas trouvé d'abonnement
$this->adEstAbonne = FALSE;
} else {
$this->aboadherent = $database->loadAssoc();
$this->adEstAbonne = TRUE;
}
}

// Si l'adhérent a le droit de gérer les adhésions alors charger la liste des périodes d'adhésions
if ($mainframe->getUserState("amap_droitAd")) {
$query = "SELECT * FROM amap_periodeadhesion";
$database->setQuery($query);
$database->query(); if ($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}
$this->gestAnAd = $database->loadObjectList();
}
}
}
}

// charge la liste des distributions d'un abonnement
function loadDistrib(){
$mainframe=& JFactory::getApplication();

// gestion du tri
$idtab = JRequest::getVar('idtab', '');
$critere = JRequest::getVar('critere', '');
$ordre = JRequest::getVar('ordre', '');

$abonnement = $mainframe->getUserState("amap_abonnement");

$database =& JFactory::getDBO();

// début de la requête principale
$query = " SELECT amap_jourdistributionabonnement.Date,";

$nbVariantes = count(listeVariantes());
// sous-requêtes comptant le nombre de paniers pour chaque variante
if($nbVariantes > 0){
for($i = 0 ; $i < $nbVariantes ; $i++){
// compte le nombre de paniers reportés à une autre date
$reportsPourAutreDate = " SELECT IFNULL(SUM(amap_abonnementadherent.Quantite), 0)
FROM amap_abonnementadherent, amap_report
WHERE amap_abonnementadherent.IDA = amap_report.IDA
AND amap_abonnementadherent.NomAbonnement = '".$abonnement['Nom']."'
AND amap_abonnementadherent.Variante = '".$abonnement['Variante'.($i+1)]."'
AND amap_report.NomAbonnement = '".$abonnement['Nom']."'
AND amap_report.DateInitial = amap_jourdistributionabonnement.Date
AND amap_abonnementadherent.Statut = 'Abonne'";

// compte le nombre de panier reportés à cette date
$reportsPourCetteDate = " SELECT IFNULL(SUM(amap_abonnementadherent.Quantite), 0)
FROM amap_abonnementadherent, amap_report
WHERE amap_abonnementadherent.IDA = amap_report.IDA
AND amap_abonnementadherent.NomAbonnement = '".$abonnement['Nom']."'
AND amap_abonnementadherent.Variante = '".$abonnement['Variante'.($i+1)]."'
AND amap_report.NomAbonnement = '".$abonnement['Nom']."'
AND amap_report.DateReport = amap_jourdistributionabonnement.Date
AND amap_abonnementadherent.Statut = 'Abonne'";

$subQuery[$i] = " SELECT IFNULL(SUM(amap_abonnementadherent.Quantite), 0) - (".$reportsPourAutreDate.") + (".$reportsPourCetteDate.")
FROM amap_abonnementadherent
WHERE amap_abonnementadherent.NomAbonnement = '".$abonnement['Nom']."'
AND amap_abonnementadherent.Variante = '".$abonnement['Variante'.($i+1)]."'
AND amap_abonnementadherent.Statut = 'Abonne'
AND amap_jourdistributionabonnement.Date >= amap_abonnementadherent.premiereDistribution";
}
foreach($subQuery as $cle => $valeur){
$query = $query.' ('.$valeur.') AS \''.$abonnement['Variante'.($cle+1)].'\',';
}
}

/*
// sous-reqûete comptant de le nombre de personne inscrites pour la distribution
$subQuery = " SELECT COUNT(*)
FROM amap_distribution
WHERE NomAbonnement = '".$abonnement['Nom']."'
AND Statut = 'Inscrit'
AND Date = amap_jourdistributionabonnement.Date";
$query = $query.' ('.$subQuery.') AS \'Inscrits\', ';
*/

// sous-reqûete comptant le nombre de paniers orphelins
$subQuery = " SELECT COUNT(*)
FROM amap_orphelin
WHERE amap_orphelin.Date = amap_jourdistributionabonnement.Date
AND IDAadoptant = 0
AND Statut = 1
AND amap_orphelin.NomAbonnement = '".$abonnement['Nom']."'";
$query = $query.' ('.$subQuery.') AS \'Orphelins\', ';


// sous-requête retournant la liste des paniers orphelins de la distribution
$subQueryListeOrph = " SELECT amap_orphelin.IDA
FROM amap_orphelin
WHERE amap_orphelin.Date = amap_jourdistributionabonnement.Date
AND amap_orphelin.NomAbonnement = '".$abonnement['Nom']."'";

$subQueryAdoptant = " SELECT CONCAT('Adopté par ', '<BR />', amap_adherent.Nom, '<BR />', amap_adherent.Prenom)
FROM amap_adherent
WHERE amap_adherent.IDA = amap_orphelin.IDAadoptant";

// sous-requête retournant l'enregistrement du panier orphelin de l'adhérent
$subQueryOrph = " SELECT IF(amap_orphelin.IDAadoptant = 0, 'Orphelin', (".$subQueryAdoptant."))
FROM amap_orphelin
WHERE amap_orphelin.IDA = ".$this->adherent['IDA']."
AND amap_orphelin.Statut = 1
AND amap_orphelin.Date = amap_jourdistributionabonnement.Date
AND amap_orphelin.NomAbonnement = '".$abonnement['Nom']."'";

// sous-reqûete retournant le nombre de paniers reportés de l'adhérent pour la distribution (0 ou 1 en réalité)
$subQueryReport = " SELECT IF(COUNT(amap_report.DateReport) = 0, 'OK', CONCAT('Reporté au <br />',DATE_FORMAT(amap_report.DateReport, '%d/%m/%Y')))
FROM amap_report
WHERE amap_report.IDA = ".$this->adherent['IDA']."
AND amap_report.NomAbonnement = '".$abonnement['Nom']."'
AND amap_report.DateInitial = amap_jourdistributionabonnement.Date";

if($this->aboEstSouscrit()){
// sous-requête retournant le statut du panier de l'adhérent
$subQuery = "SELECT IF(".$this->adherent['IDA']." NOT IN (".$subQueryListeOrph."),(".$subQueryReport."),(".$subQueryOrph."))";

$query = $query.' ('.$subQuery.') AS \'Panier\', ';
}

// sous-reqûete retournant le statut de l'adhérent relatif à la distribution
$Chef = " SELECT COUNT(*)
FROM amap_distribution
WHERE NomAbonnement = '".$abonnement['Nom']."'
AND Date = amap_jourdistributionabonnement.Date
AND Statut = 'Inscrit'
AND Role = 0";

$RoleAd = " SELECT Role
FROM amap_distribution
WHERE IDA = ".$this->adherent['IDA']."
AND NomAbonnement = '".$abonnement['Nom']."'
AND Date = amap_jourdistributionabonnement.Date
AND Statut = 'Inscrit'";

$subQueryInsc = " SELECT COUNT(*) - (".$Chef.")
FROM amap_distribution
WHERE NomAbonnement = '".$abonnement['Nom']."'
AND Statut = 'Inscrit'
AND Date = amap_jourdistributionabonnement.Date";

$subQuery = "SELECT IF((".$RoleAd.") = 0, CONCAT('1 Resp. (vous) + ', (".$subQueryInsc.")),
CONCAT(IF((".$Chef.") = 1, '1 Resp. + ', ''), IF(ISNULL((".$RoleAd.")) = 0, CONCAT((".$subQueryInsc."), ' (dont vous)'), (".$subQueryInsc."))))";

//$subQuery = " SELECT CONCAT(IF((".$Chef.") = 0,'', IF((".$RoleAd.") = 0, '1 Chef ', '1 Chef + ')), IF((".$RoleAd.") = 0,' (vous) + ', ''), (".$subQueryInsc."), IF(ISNULL((".$RoleAd.")) = 0, IF((".$RoleAd.") != 0, ' (dont vous)' ,''), ''))";

$query = $query.' ('.$subQuery.') AS \'Equipe\'';

// clause FROM et WHERE de la requête principale
$query = $query." FROM amap_jourdistributionabonnement
WHERE amap_jourdistributionabonnement.NomAbonnement = '".$abonnement['Nom']."'"
// 2009/11/10 - Suppression de ce critère incompréhensible, empèche d'afficher les dates sur les période d'adhésion future ...
//AND EXTRACT(YEAR FROM amap_jourdistributionabonnement.Date) != '".$this->periodeAdhesionFutur."'"
;

// gestion du tri
if($idtab == 'distributions'){
$query .= ' ORDER BY '.$critere.' '.$ordre;
} else {
$query .= ' ORDER BY 1 ASC';
}

// récupère toutes les distributions de l'abonnement en cours de traitement avec le nombre de panier pour chaque variante
// echo $query; // pour voir la requète si nécessité de debug
$database->setQuery($query);
$database->query(); if($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}

if($database->getNumRows() > 0){
$this->listeDistrib = new tableau;
$this->listeDistrib->table = $database->loadAssocList();
$this->listeDistrib->header[0] = 'Date';
for($i = 1 ; $i < $nbVariantes+1 ; $i++){
$this->listeDistrib->header[$i] = $abonnement['Variante'.$i];
}
//20140326BM //$this->listeDistrib->header[$nbVariantes+1] = 'Orphelins';
$this->listeDistrib->header[$nbVariantes+1] = '';
if($this->aboEstSouscrit()){
$this->listeDistrib->header[$nbVariantes+2] = 'Votre panier';
//20140326BM //$this->listeDistrib->header[$nbVariantes+3] = 'Equipe';
$this->listeDistrib->header[$nbVariantes+3] = '';
} else {
//20140326BM //$this->listeDistrib->header[$nbVariantes+4] = 'Equipe';
$this->listeDistrib->header[$nbVariantes+4] = '';
}

// gestion du tri
$this->listeDistrib->idtab = 'distributions';
$this->listeDistrib->url = 'index.php?option=com_amap&amp;view=advoirabo';

if($idtab == 'distributions'){
$this->listeDistrib->critereTri = $critere;
$this->listeDistrib->ordreTri = $ordre;
} else {
$this->listeDistrib->critereTri = 1;
$this->listeDistrib->ordreTri = 'asc';
}

// on met en valeur la ligne de la prochaine date de distribution
foreach($this->listeDistrib->table as $row){
if($row['Date'] >= date("Y-m-d")){
$this->listeDistrib->surlignage = $row['Date'];
break;
}
}

} else {
$this->listeDistrib == NULL;
}
}

// ************************************ gestion des adhérents
function loadGestAd (&$nbValides, &$nbAValider) {
$database =& JFactory::getDBO();

// gestion du tri
$idtab = JRequest::getVar('idtab', '');
$critere = JRequest::getVar('critere', '');
$ordre = JRequest::getVar('ordre', '');

$this->gestAnnee = JRequest::getVar('gestannee', '');

// adhésions valides
$query = "SELECT amap_adherent.IDA, nom, prenom , email, fixe, mobile, CommentaireBureau, commentaireadherent
FROM amap_adherent, amap_adhesion where amap_adherent.IDA = amap_adhesion.IDA AND amap_adhesion.statut = 'V' AND Periode = '".$this->gestAnnee."'";

// gestion du tri
if($idtab == 'adValides'){
$query .= ' ORDER BY '.$critere.' '.$ordre;
} else {
$query .= ' ORDER BY 2 ASC';
}

$database->setQuery($query);
$database->query(); if ($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}

$nbValides = $database->getNumRows();

if ($nbValides != 0) {
$this->gestAdherentsV = new tableau ;
$adhs = $database->loadAssocList('IDA');
foreach ($adhs as $k1=>$adh) {
//~ Formatage des noms et prénoms des adhérents
$adhs[$k1]["nom"] = FormatNomsAdh ($adh["nom"], $adh["prenom"]);
unset($adhs[$k1]["prenom"]);

//~ Formatge des numéros de téléphones
$adhs[$k1]["fixe"] = FormatPhone($adhs[$k1]["fixe"])."<br>".FormatPhone($adhs[$k1]["mobile"]);
unset($adhs[$k1]["mobile"]);
}
$this->gestAdherentsV->table = $adhs;
$this->gestAdherentsV->header[0] = 'n°';
$this->gestAdherentsV->header[1] = 'Nom prénom';
$this->gestAdherentsV->header[2] = 'email';
$this->gestAdherentsV->header[3] = 'fixe<br>mobile';
$this->gestAdherentsV->header[4] = 'commentaire Comité';
$this->gestAdherentsV->header[5] = 'commentaire Adhérent';

// gestion du tri
$this->gestAdherentsV->idtab = 'adValides';
$this->gestAdherentsV->url = 'index.php?option=com_amap&amp;view=gestad&amp;gestannee='.$this->gestAnnee;

if($idtab == 'adValides'){
$this->gestAdherentsV->critereTri = $critere;
$this->gestAdherentsV->ordreTri = $ordre;
} else {
$this->gestAdherentsV->critereTri = 2;
$this->gestAdherentsV->ordreTri = 'asc';
}
}

// Adhésions à valider

$query = "SELECT amap_adherent.IDA, nom, prenom, email, fixe, mobile, CommentaireBureau, commentaireadherent
FROM amap_adherent, amap_adhesion where amap_adherent.IDA = amap_adhesion.IDA AND amap_adhesion.statut = 'A' AND Periode = '".$this->gestAnnee."'";

// gestion du tri
if($idtab == 'adAValider'){
$query .= ' ORDER BY '.$critere.' '.$ordre;
} else {
$query .= ' ORDER BY 2 ASC';
}

$database->setQuery($query);
$database->query(); if ($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}

$nbAValider = $database->getNumRows();

if ($nbAValider != 0) {
$this->gestAdherentsI = new tableau ;
$adhs = $database->loadAssocList('IDA');
foreach ($adhs as $k1=>$adh) {
$noms = explode("/", $adh["nom"]);
$prenoms = explode("/", $adh["prenom"]);
$tmp = "";
foreach ($noms as $k2=>$value) {
$tmp .= ucfirst(strtolower($noms[$k2]))." ".ucfirst(strtolower($prenoms[$k2]))."<br>";
}
$adhs[$k1]["nom"] = $tmp;
unset($adhs[$k1]["prenom"]);
$adhs[$k1]["fixe"] = FormatPhone($adhs[$k1]["fixe"])."<br>".FormatPhone($adhs[$k1]["mobile"]);
unset($adhs[$k1]["mobile"]);
}
$this->gestAdherentsI->table = $adhs;
$this->gestAdherentsI->header[0] = 'n°';
$this->gestAdherentsI->header[1] = 'Nom prénom';
$this->gestAdherentsI->header[2] = 'email';
$this->gestAdherentsI->header[3] = 'fixe<br>mobile';
$this->gestAdherentsI->header[4] = 'commentaire Comité';
$this->gestAdherentsI->header[5] = 'commentaire Adhérent';

// gestion du tri
$this->gestAdherentsI->idtab = 'adAValider';
$this->gestAdherentsI->url = 'index.php?option=com_amap&amp;view=gestad&amp;gestannee='.$this->gestAnnee;

if($idtab == 'adAValider'){
$this->gestAdherentsI->critereTri = $critere;
$this->gestAdherentsI->ordreTri = $ordre;
} else {
$this->gestAdherentsI->critereTri = 2;
$this->gestAdherentsI->ordreTri = 'asc';
}

}
}

// ************************************ gestion des abonnements
///20131204BM ajout relais
function loadGestAbo (&$nbEncours, &$nbListe, &$nbAbonne, &$nbInvalide,$relai1,$relai2,$relai3,$relai4,$relai5,$relai6,$relai7,$relai8,$relai9,$relai10) {

//echo "relai1 $relai1";
//echo "<br>relai2 $relai2<br>";

//gestion du tri
$idtab = JRequest::getVar('idtab', '');
$critere = JRequest::getVar('critere', '');
$ordre = JRequest::getVar('ordre', '');

$database =& JFactory::getDBO();

// liste des statuts d'un abonnement
$statuts = array('Encours', 'Liste', 'Abonne', 'Invalide');

$subQueryNbInsc = " SELECT COUNT(*)
FROM amap_distribution
WHERE amap_distribution.IDA = amap_adherent.IDA
AND amap_distribution.NomAbonnement = amap_abonnementadherent.NomAbonnement";
// récupère les listes des abonnements des 4 statuts
foreach($statuts as $statut){
$query = " SELECT amap_adherent.IDA, CONCAT(amap_adherent.Nom,' ', amap_adherent.Prenom) as NomsAdh, amap_abonnementadherent.NomAbonnement, amap_abonnementadherent.DateAbonnement, amap_abonnementadherent.Commentaire, (".$subQueryNbInsc.")
FROM amap_adherent, amap_abonnementadherent, amap_abonnement
WHERE amap_adherent.IDA = amap_abonnementadherent.IDA ";
$querytous=$query;
if($relai1<>"" and $relai2=="")
	{$query=$query." AND amap_abonnement.Nom='$relai1' ";}

if($relai1<>"" and $relai2<>"" and $relai3=="")
	{ $query=$query." AND (amap_abonnement.Nom='$relai1' OR amap_abonnement.Nom='$relai2') ";}

if($relai1<>"" and $relai2<>"" and $relai3<>"" and $relai4=="")
	{ $query=$query." AND (amap_abonnement.Nom='$relai1' OR amap_abonnement.Nom='$relai2' OR amap_abonnement.Nom='$relai3') ";}

if($relai1<>"" and $relai2<>"" and $relai3<>"" and $relai4<>"" and $relai5=="")
	{ $query=$query." AND (amap_abonnement.Nom='$relai1' OR amap_abonnement.Nom='$relai2' OR amap_abonnement.Nom='$relai3' OR amap_abonnement.Nom='$relai4') ";}

//if($relai1<>"" and $relai2<>"" and $relai3<>"" and $relai4<>"" and $relai5<>"")
//	{ $query=$query." AND (amap_abonnement.Nom='$relai1' OR amap_abonnement.Nom='$relai2' OR amap_abonnement.Nom='$relai3' OR amap_abonnement.Nom='$relai4' OR amap_abonnement.Nom='$relai5') ";}


if($relai1<>"" and $relai2<>"" and $relai3<>"" and $relai4<>"" and $relai5<>"" and $relai6=="")
	{ $query=$query." AND (amap_abonnement.Nom='$relai1' OR amap_abonnement.Nom='$relai2' OR amap_abonnement.Nom='$relai3' OR amap_abonnement.Nom='$relai4' OR amap_abonnement.Nom='$relai5') ";}

if($relai1<>"" and $relai2<>"" and $relai3<>"" and $relai4<>"" and $relai5<>"" and $relai6<>"" and $relai7=="")
	{ $query=$query." AND (amap_abonnement.Nom='$relai1' OR amap_abonnement.Nom='$relai2' OR amap_abonnement.Nom='$relai3' OR amap_abonnement.Nom='$relai4' OR amap_abonnement.Nom='$relai5' OR amap_abonnement.Nom='$relai6'  ) ";}


if($relai1<>"" and $relai2<>"" and $relai3<>"" and $relai4<>"" and $relai5<>"" and $relai6<>"" and $relai7<>"" and $relai8=="")
	{ $query=$query." AND (amap_abonnement.Nom='$relai1' OR amap_abonnement.Nom='$relai2' OR amap_abonnement.Nom='$relai3' OR amap_abonnement.Nom='$relai4' OR amap_abonnement.Nom='$relai5' OR amap_abonnement.Nom='$relai6'  OR amap_abonnement.Nom='$relai7'  ) ";}

if($relai1<>"" and $relai2<>"" and $relai3<>"" and $relai4<>"" and $relai5<>"" and $relai6<>"" and $relai7<>"" and $relai8<>"" and $relai9=="")
	{ $query=$query." AND (amap_abonnement.Nom='$relai1' OR amap_abonnement.Nom='$relai2' OR amap_abonnement.Nom='$relai3' OR amap_abonnement.Nom='$relai4' OR amap_abonnement.Nom='$relai5' OR amap_abonnement.Nom='$relai6'  OR amap_abonnement.Nom='$relai7'  OR amap_abonnement.Nom='$relai8'  ) ";}

if($relai1<>"" and $relai2<>"" and $relai3<>"" and $relai4<>"" and $relai5<>"" and $relai6<>"" and $relai7<>"" and $relai8<>"" and $relai9<>"" and $relai10=="")
	{ $query=$query." AND (amap_abonnement.Nom='$relai1' OR amap_abonnement.Nom='$relai2' OR amap_abonnement.Nom='$relai3' OR amap_abonnement.Nom='$relai4' OR amap_abonnement.Nom='$relai5' OR amap_abonnement.Nom='$relai6'  OR amap_abonnement.Nom='$relai7'  OR amap_abonnement.Nom='$relai8'  OR amap_abonnement.Nom='$relai9'  ) ";}

if($relai1<>"" and $relai2<>"" and $relai3<>"" and $relai4<>"" and $relai5<>"" and $relai6<>"" and $relai7<>"" and $relai8<>"" and $relai9<>"" and $relai10<>"")
        { $query=$query." AND (amap_abonnement.Nom='$relai1' OR amap_abonnement.Nom='$relai2' OR amap_abonnement.Nom='$relai3' OR amap_abonnement.Nom='$relai4' OR amap_abonnement.Nom='$relai5' OR amap_abonnement.Nom='$relai6'  OR amap_abonnement.Nom='$relai7'  OR amap_abonnement.Nom='$relai8'  OR amap_abonnement.Nom='$relai9'  OR amap_abonnement.Nom='$relai10' ) ";}
//20140318BM ajout de relai1='tous' pour tous les contrats
if($relai1=='tous'){$query=$querytous;}


$query=$query."
AND amap_abonnement.Nom = amap_abonnementadherent.NomAbonnement
AND amap_abonnement.Statut<>'Clot'
AND amap_abonnementadherent.Statut = '".$statut."'";

// gestion du tri
if($idtab == $statut){
$query .= ' ORDER BY '.$critere.' '.$ordre;
} else {
$query .= ' ORDER BY 2 ASC';
}

//echo $query;

//echo "\n<!--\n $query \n-->\n"; // pour voir la requète si nécessité de debug

$database->setQuery($query);
$database->query(); if($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}
if(${'nb'.$statut} = $database->getNumRows() > 0) {
$this->{'gestAboldb'.$statut} = new tableau ;
$this->{'gestAboldb'.$statut}->table = $database->loadAssocList();
//~ Formatage du nom des adhérents
foreach ($this->{'gestAboldb'.$statut}->table as $k=>$v) {
$this->{'gestAboldb'.$statut}->table[$k]["NomsAdh"] = FormatNomsAdh($v["NomsAdh"]);
}
$this->{'gestAboldb'.$statut}->header[0] = 'n°';
$this->{'gestAboldb'.$statut}->header[1] = 'Nom prénom';
$this->{'gestAboldb'.$statut}->header[2] = 'Abonnement';
$this->{'gestAboldb'.$statut}->header[3] = 'Date';
$this->{'gestAboldb'.$statut}->header[4] = 'Commentaire';
$this->{'gestAboldb'.$statut}->header[5] = 'permanence';

// gestion du tri
$this->{'gestAboldb'.$statut}->idtab = $statut;
$this->{'gestAboldb'.$statut}->url = 'index.php?option=com_amap&amp;view=gestaboldb';

if($idtab == $statut){
$this->{'gestAboldb'.$statut}->critereTri = $critere;
$this->{'gestAboldb'.$statut}->ordreTri = $ordre;
} else {
$this->{'gestAboldb'.$statut}->critereTri = 2;
$this->{'gestAboldb'.$statut}->ordreTri = 'asc';
}
}
}
}

// renvoie vrai si le panier de l'adhérent a été déclaré orphelin
function estOrphelin($date){
$mainframe=& JFactory::getApplication();

$ida = $mainframe->getUserState("amap_ida", 0);
$abonnement = $mainframe->getUserState("amap_abonnement", NULL);

if($ida > 0 && $abonnement != NULL && $date != ''){
$database = &JFactory::getDBO();

$query = "SELECT * FROM amap_orphelin WHERE IDA = ".$ida." AND Date = '".$date."' AND NomAbonnement = '".$abonnement['Nom']."'";

$database->setQuery($query);
$database->query(); if($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}

return $database->getNumRows() > 0;
}
return FALSE;
}

// charge la liste des paniers orphelin
function loadListeOrph($date, $panierAdOrph){
$mainframe=& JFactory::getApplication();

// gestion du tri
$idtab = JRequest::getVar('idtab', '');
$critere = JRequest::getVar('critere', '');
$ordre = JRequest::getVar('ordre', '');

$abonnement = $mainframe->getUserState("amap_abonnement", NULL);
$ida = $mainframe->getUserState("amap_ida", 0);

$this->listeOrphDistrib = NULL; // liste des paniers orphelins d'une distribution
$this->listOrphAdopte = NULL; // liste des paniers orphelins ayant trouvé un adoptant
$this->listeAdoptantPanierAd = NULL; // liste des adoptants pour le panier de l'adhérent
$this->listeOrphAdopteAd = NULL; // liste des paniers orphelins adopté par l'adhérent

if($date != '' && $abonnement != NULL && $ida > 0){
$database = &JFactory::GetDBO();

// liste des paniers orphelins d'une distribution
$subQueryNom = "SELECT CONCAT(amap_adherent.Nom,  amap_adherent.Prenom)
FROM amap_adherent
WHERE amap_adherent.IDA = amap_orphelin.IDA";

$query = " SELECT amap_orphelin.IDA, (".$subQueryNom."), amap_abonnementadherent.Variante
FROM amap_orphelin, amap_abonnementadherent
WHERE amap_orphelin.IDAadoptant = 0
AND amap_orphelin.Statut = 1
AND amap_abonnementadherent.IDA = amap_orphelin.IDA
AND amap_orphelin.Date = '".$date."'
AND amap_orphelin.NomAbonnement = '".$abonnement['Nom']."'
AND amap_abonnementadherent.NomAbonnement = '".$abonnement['Nom']."'";

// gestion du tri
if($idtab == 'listeOrphDistrib'){
$query .= ' ORDER BY '.$critere.' '.$ordre;
} else {
$query .= ' ORDER BY 2 ASC';
}

$database->setQuery($query);
$database->query(); if($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}

if($database->getNumRows() > 0){
$this->listeOrphDistrib = new tableau;
$this->listeOrphDistrib->table = $database->loadAssocList();
$this->listeOrphDistrib->header[0] = 'N° Adhérent';
$this->listeOrphDistrib->header[1] = 'Propriétaire';
$this->listeOrphDistrib->header[2] = 'Variante';

// gestion du tri
$this->listeOrphDistrib->idtab = 'listeOrphDistrib';
$this->listeOrphDistrib->url = 'index.php?option=com_amap&amp;view=advoirdistrib&amp;abo='.$abonnement['Nom'].'&amp;distrib='.$date;

if($idtab == 'listeOrphDistrib'){
$this->listeOrphDistrib->critereTri = $critere;
$this->listeOrphDistrib->ordreTri = $ordre;
} else {
$this->listeOrphDistrib->critereTri = 2;
$this->listeOrphDistrib->ordreTri = 'asc';
}
}

// liste des paniers orphelins ayant trouvé un adoptant
$subQueryNom = "SELECT CONCAT(amap_adherent.Nom,  amap_adherent.Prenom)
FROM amap_adherent
WHERE amap_adherent.IDA = amap_orphelin.IDA";

$subQueryAdoptant = " SELECT CONCAT(amap_adherent.Nom,  amap_adherent.Prenom)
FROM amap_adherent
WHERE amap_adherent.IDA = amap_orphelin.IDAadoptant";

$query = " SELECT amap_orphelin.IDA, (".$subQueryNom."), (".$subQueryAdoptant.")
FROM amap_orphelin
WHERE amap_orphelin.IDAadoptant > 0
AND amap_orphelin.Statut = 1
AND amap_orphelin.Date = '".$date."'
AND amap_orphelin.NomAbonnement = '".$abonnement['Nom']."'";

// gestion du tri
if($idtab == 'listOrphAdopte'){
$query .= ' ORDER BY '.$critere.' '.$ordre;
} else {
$query .= ' ORDER BY 2 ASC';
}

$database->setQuery($query);
$database->query(); if($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}

if($database->getNumRows() > 0){
$this->listOrphAdopte = new tableau;
$this->listOrphAdopte->table = $database->loadAssocList();
$this->listOrphAdopte->header[0] = 'N° Adhérent';
$this->listOrphAdopte->header[1] = 'Propriétaire';
$this->listOrphAdopte->header[2] = 'Adoptant';

// gestion du tri
$this->listOrphAdopte->idtab = 'listOrphAdopte';
$this->listOrphAdopte->url = 'index.php?option=com_amap&amp;view=advoirdistrib&amp;abo='.$abonnement['Nom'].'&amp;distrib='.$date;

if($idtab == 'listOrphAdopte'){
$this->listOrphAdopte->critereTri = $critere;
$this->listOrphAdopte->ordreTri = $ordre;
} else {
$this->listOrphAdopte->critereTri = 2;
$this->listOrphAdopte->ordreTri = 'asc';
}
}

if($panierAdOrph){
// liste des adoptants pour le panier de l'adhérent
$subQueryAdoptant = " SELECT CONCAT(amap_adherent.Nom,  amap_adherent.Prenom)
FROM amap_adherent
WHERE amap_adherent.IDA = amap_orphelin.IDAadoptant";

$query = " SELECT (".$subQueryAdoptant."), amap_orphelin.DateAdoption, IF(amap_orphelin.Statut = 0, 'A renoncé', 'Adoptant acutel')
FROM amap_orphelin
WHERE amap_orphelin.IDA = ".$ida."
AND amap_orphelin.Date = '".$date."'
AND amap_orphelin.IDAadoptant > 0
AND amap_orphelin.NomAbonnement = '".$abonnement['Nom']."'";

// gestion du tri
if($idtab == 'listeAdoptantPanierAd'){
$query .= ' ORDER BY '.$critere.' '.$ordre;
} else {
$query .= ' ORDER BY 2 ASC';
}

$database->setQuery($query);
$database->query(); if($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}

if($database->getNumRows() > 0){
$this->listeAdoptantPanierAd = new tableau;
$this->listeAdoptantPanierAd->table = $database->loadAssocList();
$this->listeAdoptantPanierAd->header[0] = 'Adoptant';
$this->listeAdoptantPanierAd->header[1] = 'Date d\'adoption';
$this->listeAdoptantPanierAd->header[2] = 'Statut';

// gestion du tri
$this->listeAdoptantPanierAd->idtab = 'listeAdoptantPanierAd';
$this->listeAdoptantPanierAd->url = 'index.php?option=com_amap&amp;view=advoirdistrib&amp;abo='.$abonnement['Nom'].'&amp;distrib='.$date;

if($idtab == 'listeAdoptantPanierAd'){
$this->listeAdoptantPanierAd->critereTri = $critere;
$this->listeAdoptantPanierAd->ordreTri = $ordre;
} else {
$this->listeAdoptantPanierAd->critereTri = 2;
$this->listeAdoptantPanierAd->ordreTri = 'asc';
}
}
}

if(!$panierAdOrph){
// liste des paniers adopté par l'adhérent
$subQueryNom = "SELECT CONCAT(amap_adherent.Nom,  amap_adherent.Prenom)
FROM amap_adherent
WHERE amap_adherent.IDA = amap_orphelin.IDA";

$query = " SELECT amap_orphelin.IDA, (".$subQueryNom."), amap_abonnementadherent.Variante
FROM amap_orphelin, amap_abonnementadherent
WHERE amap_orphelin.IDAadoptant = ".$ida."
AND amap_orphelin.Statut = 1
AND amap_abonnementadherent.IDA = amap_orphelin.IDA
AND amap_orphelin.Date = '".$date."'
AND amap_orphelin.NomAbonnement = '".$abonnement['Nom']."'
AND amap_abonnementadherent.NomAbonnement = '".$abonnement['Nom']."'";

// gestion du tri
if($idtab == 'listeOrphAdopteAd'){
$query .= ' ORDER BY '.$critere.' '.$ordre;
} else {
$query .= ' ORDER BY 2 ASC';
}

$database->setQuery($query);
$database->query(); if($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}

if($database->getNumRows() > 0){
$this->listeOrphAdopteAd = new tableau;
$this->listeOrphAdopteAd->table = $database->loadAssocList();
$this->listeOrphAdopteAd->header[0] = 'N° Adhérent';
$this->listeOrphAdopteAd->header[1] = 'Propriétaire';
$this->listeOrphAdopteAd->header[2] = 'Variante';

// gestion du tri
$this->listeOrphAdopteAd->idtab = 'listeOrphAdopteAd';
$this->listeOrphAdopteAd->url = 'index.php?option=com_amap&amp;view=advoirdistrib&amp;abo='.$abonnement['Nom'].'&amp;distrib='.$date;

if($idtab == 'listeOrphAdopteAd'){
$this->listeOrphAdopteAd->critereTri = $critere;
$this->listeOrphAdopteAd->ordreTri = $ordre;
} else {
$this->listeOrphAdopteAd->critereTri = 2;
$this->listeOrphAdopteAd->ordreTri = 'asc';
}
}
}
}
}

// charge la liste des adhérents inscrits à une distribution
function loadEquipeDistrib($date){
$mainframe=& JFactory::getApplication();
$abonnement = $mainframe->getUserState("amap_abonnement", NULL);
if($abonnement != NULL){
$database = &JFactory::GetDBO();

// gestion du tri
$idtab = JRequest::getVar('idtab', '');
$critere = JRequest::getVar('critere', '');
$ordre = JRequest::getVar('ordre', '');

// détermination du nom de l'adhérent
$subqueryNom = "SELECT CONCAT(amap_adherent.Nom,  amap_adherent.Prenom)
FROM amap_adherent
WHERE amap_distribution.IDA = amap_adherent.IDA";

$subqueryRole = " SELECT MIN(amap_distribution.Role)
FROM amap_distribution
WHERE amap_distribution.Date = '".$date."'
AND amap_distribution.NomAbonnement = '".$abonnement['Nom']."'
AND amap_distribution.Statut != 'Abandonne'";

// liste de l'équipe de distribution
$query = " SELECT amap_distribution.IDA, (".$subqueryNom."), CONCAT(Fixe,'/', Mobile), IF(amap_distribution.Statut = 'Inscrit',
IF(amap_distribution.Role = 0, 'Responsable',
IF(amap_distribution.Role = (".$subqueryRole."), 'Responsable (provisoire)', '')), 'A abandonné')

FROM amap_distribution, amap_adherent
WHERE amap_distribution.Date = '".$date."'
AND amap_adherent.IDA = amap_distribution.IDA
AND amap_distribution.NomAbonnement = '".$abonnement['Nom']."'
GROUP BY amap_distribution.Role ASC";

// gestion du tri
if($idtab == 'listeEquipeDistrib'){
$query .= ' ORDER BY '.$critere.' '.$ordre;
} else {
$query .= ' ORDER BY 4 DESC';
}

$database->setQuery($query);
$database->query(); if($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}

if($database->getNumRows() > 0){
$this->listeEquipeDistrib = new tableau;
$this->listeEquipeDistrib->table = $database->loadAssocList();
$this->listeEquipeDistrib->header[0] = 'N°';
$this->listeEquipeDistrib->header[1] = 'Nom Prénom';
$this->listeEquipeDistrib->header[2] = 'Tel Fixe/Mobile';
$this->listeEquipeDistrib->header[3] = 'Statut';

// gestion du tri
$this->listeEquipeDistrib->idtab = 'listeEquipeDistrib';
$this->listeEquipeDistrib->url = 'index.php?option=com_amap&amp;view=advoirdistrib&amp;abo='.$abonnement['Nom'].'&amp;distrib='.$date;

if($idtab == 'listeEquipeDistrib'){
$this->listeEquipeDistrib->critereTri = $critere;
$this->listeEquipeDistrib->ordreTri = $ordre;
} else {
$this->listeEquipeDistrib->critereTri = 4;
$this->listeEquipeDistrib->ordreTri = 'desc';
}
}
}

}

// charge la liste des distributions auxquelles on peut reporter un panier et renvoie vraie si on peut reporter le panier de la distribution
function listeDistributionsReport($date){
$mainframe=& JFactory::getApplication();

$abonnement = $mainframe->getUserState("amap_abonnement", NULL);
$ida = $mainframe->getUserState("amap_ida", 0);

if($abonnement != NULL && $ida > 0){
$database = &JFactory::getDBO();

// on commence a regarder si un report sortant est possible
$query = " SELECT Date, ReportSortant
FROM amap_jourdistributionabonnement
WHERE amap_jourdistributionabonnement.Date = '".$date."'
AND amap_jourdistributionabonnement.NomAbonnement = '".$abonnement['Nom']."'
GROUP BY Date DESC
LIMIT ".($abonnement['EcartMaxReport']+1);
$database->setQuery($query);
$database->query(); if($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}
if($database->getNumRows() == 1){
$resultat = $database->loadRowList();
$sortant = $resultat[0][1];
} else {
echo 'Erreur : deux jours de livraison pour la meme date et le même contrat';
}

if ($sortant) {
// on recherche les dates antérieures. Les dates pour la distribution qui vérifient les conditions suivantes
// report entrant possible
// n'a pas déjà fait l'objet d'un report du même adhérent et pour la même distrib
// est supérieure à la première date de distribution pour cet abonné et cet abonnement
// est inférieure à la date en paramètre
// à rajouter : "est supérieure à la date courante"
// on prend ces dates en ordre decroissant et on ne conserve que les plus proches de la date
$query = " SELECT Date, ReportSortant
FROM amap_jourdistributionabonnement, amap_abonnementadherent
WHERE amap_jourdistributionabonnement.Date <= '".$date."'
AND amap_abonnementadherent.IDA = ".$ida."
AND amap_abonnementadherent.NomAbonnement = '".$abonnement['Nom']."'
AND amap_jourdistributionabonnement.Date >= amap_abonnementadherent.PremiereDistribution
AND amap_jourdistributionabonnement.Date >= NOW()
AND amap_jourdistributionabonnement.ReportEntrant = 1
AND amap_jourdistributionabonnement.NomAbonnement = '".$abonnement['Nom']."'
AND DATE NOT IN(
SELECT DateReport FROM amap_report
WHERE IDA = ".$ida."
AND NomAbonnement='".$abonnement['Nom']."'
AND DateReport != '".$date."'
)
GROUP BY Date DESC
LIMIT ".($abonnement['EcartMaxReport']+1);

$database->setQuery($query);
$database->query(); if($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}

$liste = $database->loadAssocList();

$dateCourante = date("Y-m-d");

// recopie les dates dans un tableau simple sauf si la date est passé (inutile si fait dans le select)
foreach($liste as $cle => $valeur){
if($valeur['Date'] > $dateCourante){
$this->listeDatesReport[] = $valeur['Date'];
}
}
// on inverse le tableau pour présenter les date en ordre croissant
if($this->listeDatesReport != NULL){
$this->listeDatesReport = array_reverse($this->listeDatesReport);
}

// on cherche ensuite les dates postérieures qui vérifient donc les critères :
// date supérieure à la date en argument
// report entrant possible
// n'a pas déjà fait l'objet d'un report du même adhérent (ajouter "et pour la même distrib")
// rajouter "et est inférieure à la date de dernière distrib"
$query = " SELECT Date
FROM amap_jourdistributionabonnement, amap_abonnementadherent
WHERE amap_jourdistributionabonnement.Date > '".$date."'
AND amap_abonnementadherent.IDA = ".$ida."
AND amap_abonnementadherent.NomAbonnement = '".$abonnement['Nom']."'
AND amap_jourdistributionabonnement.Date <= amap_abonnementadherent.DerniereDistribution
AND amap_jourdistributionabonnement.Date >= NOW()
AND amap_jourdistributionabonnement.ReportEntrant = 1
AND amap_jourdistributionabonnement.NomAbonnement = '".$abonnement['Nom']."'
AND DATE NOT IN(
SELECT DateReport FROM amap_report
WHERE IDA = ".$ida."
AND NomAbonnement='".$abonnement['Nom']."'
AND DateReport != '".$date."'
)
GROUP BY Date ASC
LIMIT ".($abonnement['EcartMaxReport']+1);

$database->setQuery($query);
$database->query(); if($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}

$liste = $database->loadAssocList();

// recopie les dates dans dans le tableau simple après les dates antérieures
foreach($liste as $cle => $valeur){
$this->listeDatesReport[] = $valeur['Date'];
}
// la date était bien sortante
return TRUE;
} else {
// la date n'etait pas sortante
return FALSE;
}

}


}

// renvoie le formulaire nécéssaire pour faire un report de panier
function formulaireReport($date){
$formulaire = new formulaire;
//$formulaire->titre = 'Reporter au';
$formulaire->submittext = 'Reporter';
$formulaire->task = 'adReport';
$formulaire->fields = array(
'dateReport'=>array('libelle'=>'Reporter ce panier au','name'=>'dateReport','type'=>'select','size'=>1,'disabled'=>array($date),'value'=>'','options'=>$this->listeDatesReport,'errmsg'=>NULL),
'dateInitial'=>array('libelle'=>'dateInitial','name'=>'dateInitial','type'=>'hidden','value'=>$date,'errmsg'=>NULL),
);

return $formulaire;
}

// renvoie le formulaire nécéssaire à la saisie d'un compte rendu de distribution
function formulaireCompteRendu($date){
$mainframe=& JFactory::getApplication();

$abonnement = $mainframe->getUserState("amap_abonnement", NULL);

if($abonnement != NULL && $date != ''){
$database = &JFactory::getDBO();

$query = " SELECT CompteRendu
FROM amap_jourdistributionabonnement
WHERE NomAbonnement = '".$abonnement['Nom']."'
AND Date = '".$date."'";

$database->setQuery($query);
$database->query(); if($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}

if($database->getNumRows() > 0){
$resultat = $database->loadRowList();
} else {
$resultat = NULL;
}

$formulaire = new formulaire;
$formulaire->submittext = 'Envoyer';
$formulaire->task = 'enregistrerCompteRendu';
$formulaire->fields = array(
'fieldset1'=>array('type'=>'fieldset', 'legend'=>'Compte rendu', 'endfield'=>'texte'),
'date'=>array('type'=>'hidden', 'name'=>'date', 'value'=>$date),
'texte'=>array('libelle'=>'Votre texte', 'type'=>'textarea', 'name'=>'texte', 'cols'=>50, 'rows'=>6, 'value'=>$resultat[0][0])
);
}

return $formulaire;
}

// renvoie la date de report si l'adhérent a reporté le panier de la distribution
function estReporte($date){
$mainframe=& JFactory::getApplication();
$ida = $mainframe->getUserState("amap_ida", 0);
$abonnement = $mainframe->getUserState("amap_abonnement", NULL);

if($ida > 0 && $abonnement != NULL && $date != ''){
$database = &JFactory::getDBO();

$query = " SELECT DateReport
FROM amap_report
WHERE IDA = ".$ida."
AND NomAbonnement = '".$abonnement['Nom']."'
AND DateInitial = '".$date."'";

$database->setQuery($query);
$database->query(); if($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}

if($database->getNumRows() > 0){
$resultat = $database->loadAssocList();
return $resultat[0]['DateReport'];
}
}
return NULL;
}

// renvoie le statut d'un adhérent vis à vis d'une distribution particulière
function adStatutDistrib($date){
$mainframe=& JFactory::getApplication();
$ida = $mainframe->getUserState("amap_ida", 0);
$abonnement = $mainframe->getUserState("amap_abonnement", NULL);

if($ida > 0 && $abonnement != NULL && $date != ''){
$database = &JFactory::getDBO();

$query = " SELECT Statut, Role
FROM amap_distribution
WHERE IDA = ".$ida."
AND NomAbonnement = '".$abonnement['Nom']."'
AND Date = '".$date."'";

$database->setQuery($query);
$database->query(); if($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}

if($database->getNumRows() > 0){
$resultat = $database->loadAssocList();
if($resultat[0]['Statut'] == 'Inscrit'){
$statut = 'Inscrit';

if($resultat[0]['Role'] == 0){
$statut = 'Chef d\'équipe';
}

} else {
$statut = 'Abandonne';
}


} else {
$statut = NULL;
}

return $statut;
}
}

// renvoie le formulaire d'abonnement
function formulaireAbo(){
$mainframe=& JFactory::getApplication();
//20140331BM four force
//$abonnement = $mainframe->getUserState($option.'abonnement_nom');
//echo"<br>ggggggggggggggggggggggggggggggggg abonnement $abonnement ddddd<br>";

//if($abonnement<>"")
//{

//echo "je bifurque";
//$ida=$mainframe->getUserState($option.'abonnement_ida');
//$nom=$mainframe->getUserState($option.'abonnement_nom');
//$societe=$mainframe->getUserState($option.'abonnement_societe');
//$produit=$mainframe->getUserState($option.'abonnement_produit');
//$periodicite=$mainframe->getUserState($option.'abonnement_periodicite');
//$lieu=$mainframe->getUserState($option.'abonnement_lieu');
//}
//else
//{
//echo "le passe pas";

$abonnement = $mainframe->getUserState("amap_abonnement");
$ida = $mainframe->getUserState("amap_ida");
$nom = $abonnement['Nom'];
$societe = $abonnement['Societe'];
$produit = $abonnement['Produit'];
$periodicite = $abonnement['Periodicite'];
$lieu = $abonnement['Lieu'];
//}
$formulaire = new formulaire;
$formulaire->titre = 'Abonnement '.$abonnement['Nom'];
$formulaire->submittext = 'Je m\'abonne';
$formulaire->task = 'AdAbo';

$formulaire->texte = descriptionAbonnement().etatAbonnements();


// on cree un formulaire en fonction des caractéristiques de l'abonnement
$formulaire->fields = array(
'IDA'=>array('libelle'=>'IDA','name'=>'IDA','type'=>'hidden','value'=>$ida, 'errmsg'=>NULL),
'email'=>array('libelle'=>'email','name'=>'email','type'=>'hidden','value'=>$this->adherent['Email'],'errmsg'=>NULL),
'nom'=>array('libelle'=>'nom','name'=>'nom','type'=>'hidden','valie'=>$this->adherent['Nom'],'errmsg'=>NULL),
'prenom'=>array('libelle'=>'prenom','name'=>'prenom','type'=>'hidden','valie'=>$this->adherent['Prenom'],'errmsg'=>NULL),
);
// charge la liste des variantes
$listeVariantes = listeVariantes();

// création du premier fieldset si on peut paramétrer le produit
if($abonnement['QteMax'] > 1 || $listeVariantes != NULL){
if($listeVariantes != NULL){
$endfield = 'variante';
} else {
$endfield = 'quantite';
}
$formulaire->fields += array(
'fieldset1'=>array('type'=>'fieldset', 'legend'=>'Le produit', 'endfield'=>$endfield)
);
}

// si une quantité maximum est indiqué alors on demande la quantité
if($abonnement['QteMax'] > 1){
$formulaire->fields += array(
'quantite'=>array('libelle'=>'Quantité (max '.$abonnement['QteMax'].')','name'=>'quantite','type'=>'text', 'size'=>20,'value'=>'', 'errmsg'=>NULL),
);
} ;

// si il existe des variantes alors proposer un menu déroulant pour sélectionner une variante
if($listeVariantes != NULL){
$formulaire->fields += array(
'variante'=>array('libelle'=>'Variante', 'name'=>'variante','type'=>'select','size'=>1,'options'=>$listeVariantes,'value'=>'','errmsg'=>NULL),
);
}
// options de l'abonnement
$listeOptions = listeOptions(); // nom des options
$qteMaxOptions = qteMaxOptions(); // quantité max des options

if($listeOptions != NULL) {
$formulaire->fields += array(
'fieldset2'=>array('type'=>'fieldset', 'legend'=>'Options possibles (saisir en unités par livraison)', 'endfield'=>'option'.count($listeOptions))
);

$i = 0;
foreach($listeOptions as $cle => $option){
// si aucune quantité max n'est indiqué alors on utilises une checkbox sinon un input text
if($qteMaxOptions[$i] == 0) {
$formulaire->fields += array('option'.($i+1)=>array('libelle'=>$option,'name'=>'option'.($i+1)." à ",'type'=>'checkbox','value'=>0,'errmsg'=>NULL),);
} else {
$formulaire->fields += array(
// 'option'.($i+1).'chk'=>array('libelle'=>'Prendre l\'option '.$option,'name'=>'option'.($i+1).'chk','type'=>'checkbox','value'=>0,'errmsg'=>NULL),
//201440511BM 'option'.($i+1)=>array('libelle'=>$option.' (max '.$abonnement['QteMaxOption'.($i+1)].')','name'=>'option'.($i+1),'type'=>'text','value'=>'','size'=>10,'errmsg'=>NULL),);
//20140910BM
//'option'.($i+1)=>array('libelle'=>$option.' à '.$abonnement['PO'.($i+1)].' € (maximum '.$abonnement['QteMaxOption'.($i+1)].' unités)','name'=>'option'.($i+1),'type'=>'text','value'=>'','size'=>10,'errmsg'=>NULL),);
'option'.($i+1)=>array('libelle'=>$option.' à '.$abonnement['PO'.($i+1)].' € ... ','name'=>'option'.($i+1),'type'=>'text','value'=>'','size'=>10,'errmsg'=>NULL),);
}
$i++;
}
}

// droplist pour choisir la date de sa première distribution
$distributionsDispos = $this->distributionsDispos();

$formulaire->fields += array(
'fieldset3'=>array('type'=>'fieldset','legend'=>'Début effectif', 'endfield'=>'premiereDistrib'),
'premiereDistrib'=>array('libelle'=>'Date des livraisons :','type'=>'select','name'=>'premiereDistrib','options'=>$distributionsDispos,'size'=>1,'value'=>''),
);

return $formulaire;
}

// renvoie la liste des distributions restantes afin pour choisir le début effectif de l'abonnement
function distributionsDispos(){
$mainframe=& JFactory::getApplication();
// $distributionsDispos=0;
$abonnement = $mainframe->getUserState("amap_abonnement", NULL);

if($abonnement != NULL){
$database = &JFactory::getDBO();

$query = " SELECT Date
FROM amap_jourdistributionabonnement
WHERE NomAbonnement = '".$abonnement['Nom']."'
AND DATE_ADD(DATE_SUB(Date, INTERVAL ".$abonnement['JoursPreparation']." DAY),INTERVAL '".$abonnement['Delai']."' HOUR_SECOND) > NOW()";


$database->setQuery($query);
$database->query(); if($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}

$resultat = $database->loadRowList();

if ($resultat) {
foreach($resultat as $row){
$distributionsDispos[] = $row[0];
}
}

return $distributionsDispos;
}
}

// renvoie la liste de toutes les distributions pour choisir le début et la fin effectives de l'abonnement par le gestionnaire
function distributions(){
$mainframe=& JFactory::getApplication();
$abonnement = $mainframe->getUserState("amap_abonnement", NULL);

if($abonnement != NULL){
$database = &JFactory::getDBO();

$query = " SELECT Date
FROM amap_jourdistributionabonnement
WHERE NomAbonnement = '".$abonnement['Nom']."';";
//20131014BM
//echo $query;
$database->setQuery($query);
$database->query(); if($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}

$resultat = $database->loadRowList();

if ($resultat) {
foreach($resultat as $row){
$distributionsDispos[] = $row[0];
}
}

return $distributionsDispos;
}
}

// renvoie le tableau du rapport de la liste de distribution
function rapportListeDistribution($date){
$mainframe=& JFactory::getApplication();

$abonnement = $mainframe->getUserState("amap_abonnement", NULL);

if($abonnement != NULL){
$database = &JFactory::getDBO();

$header = array('Nom Prénom', 'Tel. Fixe / Mobile');

$subQueryAdopte = " SELECT IFNULL(COUNT(*), 0)
FROM amap_orphelin
WHERE amap_orphelin.IDA = amap_abonnementadherent.IDA
AND amap_orphelin.NomAbonnement = '".$abonnement['Nom']."'
AND amap_orphelin.Date = '".$date."'
AND amap_orphelin.IDAadoptant > 0
AND Statut = 1";

$subQueryAdoptant = " SELECT CONCAT(a.Nom, ' ', a.Prenom, ' - ',amap_adherent.Nom)
FROM amap_adherent as a , amap_orphelin
WHERE amap_abonnementadherent.IDA = amap_orphelin.IDA
AND a.IDA = amap_orphelin.IDAadoptant
AND amap_orphelin.NomAbonnement = '".$abonnement['Nom']."'
AND amap_orphelin.Statut = 1
AND amap_orphelin.Date = '".$date."'";

$subQueryTelAdoptant = "SELECT CONCAT(amap_adherent.Fixe, ' / ',amap_adherent.Mobile)
FROM amap_adherent, amap_orphelin
WHERE amap_abonnementadherent.IDA = amap_orphelin.IDA
AND amap_orphelin.IDAadoptant = amap_adherent.IDA
AND amap_orphelin.NomAbonnement = '".$abonnement['Nom']."'
AND amap_orphelin.Statut = 1
AND amap_orphelin.Date = '".$date."'";

$subQueryTel = "SELECT IF((".$subQueryAdopte.") > 0, (".$subQueryTelAdoptant."), CONCAT(amap_adherent.Fixe, ' / ', amap_adherent.Mobile))";

$subQueryNom = "SELECT IF((".$subQueryAdopte.") > 0, (".$subQueryAdoptant."), CONCAT(amap_adherent.Nom, ' ', amap_adherent.Prenom))";

$query = "SELECT (".$subQueryNom.") AS 'NomPrenom', (".$subQueryTel.")";

if ($abonnement['QteMax'] > 0 ){ // QteMax ==0 indique qu'on ne traite que des options
if(listeVariantes() != NULL){
$header[] = 'Variante';
$query .= ", amap_abonnementadherent.Variante";
}

$header[] = 'Quantité';

$subQueryReportEntrant = " SELECT COUNT(*)
FROM amap_report
WHERE amap_report.IDA = amap_abonnementadherent.IDA
AND amap_report.NomAbonnement = '".$abonnement['Nom']."'
AND amap_report.DateReport = '".$date."'";

$query .= " , amap_abonnementadherent.Quantite + amap_abonnementadherent.Quantite * (".$subQueryReportEntrant.")";
}

$listeOptions = listeOptions();
if($listeOptions != NULL){
$i = 0;
foreach($listeOptions as $row){
$header[] = $row;
$query .= ", IF(amap_abonnementadherent.QuantiteOption".($i+1)." = 0, '-', amap_abonnementadherent.QuantiteOption".($i+1).")";

$i++;
}
}

$subQueryReport = " SELECT COUNT(*)
FROM amap_report
WHERE amap_report.IDA = amap_abonnementadherent.IDA
AND amap_report.NomAbonnement = '".$abonnement['Nom']."'
AND amap_report.DateInitial = '".$date."'";

$subQueryNomProprietaire = "SELECT CONCAT('Adoption du panier de ', amap_adherent.Nom, ' ', amap_adherent.Prenom)
FROM amap_adherent
WHERE amap_adherent.IDA = amap_abonnementadherent.IDA";

$subQueryOrphelin = " SELECT IF(amap_orphelin.IDAadoptant = 0, 'Orphelin', (".$subQueryNomProprietaire."))
FROM amap_orphelin
WHERE amap_orphelin.IDA = amap_abonnementadherent.IDA
AND amap_orphelin.NomAbonnement = '".$abonnement['Nom']."'
AND amap_orphelin.Date = '".$date."'
AND Statut = 1";

$subQueryStatut = " SELECT IF((".$subQueryReport.") > 0, 'Reporté', (".$subQueryOrphelin."))";

$header[] = 'Statut';
$query .= " , (".$subQueryStatut.")";

$query .= " FROM amap_adherent, amap_abonnementadherent
WHERE amap_abonnementadherent.NomAbonnement = '".$abonnement['Nom']."'
AND amap_abonnementadherent.Statut = 'Abonne'
AND amap_abonnementadherent.PremiereDistribution <= '".$date."'
AND amap_abonnementadherent.DerniereDistribution >= '".$date."'
AND amap_adherent.IDA = amap_abonnementadherent.IDA
GROUP BY NomPrenom ASC";

//message($query);

//echo "\n<!--\n $query \n-->\n"; // pour voir la requète si nécessité de debug
$database->setQuery($query);
$database->query(); if($database->getErrorNum()) {message( 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />');}

if($database->getNumRows() == 0){
return NULL;
}
$resultat = $database->loadAssocList();

$arr[] = $header;
foreach($resultat as $row){
$arr[] = $row;
}

return $arr;
}
}

// renvoie le nombre de panier que doit venir chercher un adhérent
function nbPaniers($date){
$mainframe=& JFactory::getApplication();

$ida = $mainframe->getUserState("amap_ida", 0);
$abonnement = $mainframe->getUserState("amap_abonnement", NULL);
$date = JRequest::getVar('distrib', '');

if($abonnement != NULL && $date != '' && $ida > 0){
$database = &JFactory::getDBO();


$subQueryPaniersAdoptes = " SELECT IFNULL(SUM(amap_abonnementadherent.Quantite), 0)
FROM amap_abonnementadherent, amap_orphelin
WHERE amap_orphelin.IDA = amap_abonnementadherent.IDA
AND amap_orphelin.NomAbonnement = amap_abonnementadherent.NomAbonnement
AND amap_orphelin.IDAadoptant = ".$ida."
AND amap_orphelin.NomAbonnement = '".$abonnement['Nom']."'
AND amap_orphelin.Date = '".$date."'
AND amap_orphelin.Statut = 1";

$subQueryPaniersReportes = "SELECT IFNULL(SUM(amap_abonnementadherent.Quantite), 0)
FROM amap_abonnementadherent, amap_report
WHERE amap_report.IDA = amap_abonnementadherent.IDA
AND amap_report.NomAbonnement = amap_abonnementadherent.NomAbonnement
AND amap_report.IDA = ".$ida."
AND amap_report.NomAbonnement = '".$abonnement['Nom']."'
AND amap_report.DateReport = '".$date."'
AND amap_abonnementadherent.NomAbonnement = '".$abonnement['Nom']."'";

$subQueryQuantite = " SELECT IFNULL(SUM(amap_abonnementadherent.Quantite), 0)
FROM amap_abonnementadherent
WHERE amap_abonnementadherent.IDA = ".$ida."
AND amap_abonnementadherent.NomAbonnement = '".$abonnement['Nom']."'
AND amap_abonnementadherent.Statut = 'Abonne'
AND '".$date."' >= PremiereDistribution";

$query = " SELECT (".$subQueryQuantite.") + (".$subQueryPaniersAdoptes.") + (".$subQueryPaniersReportes.")";

$database->setQuery($query);
$database->query(); if($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}

if($database->getNumRows() >0){
$resultat = $database->loadRow();

return $resultat[0];
}

return NULL;
}
}

// renvoie VRAI si l'abonnement en cours de traitement a été souscrit par l'adhérent et est valide
function aboEstSouscrit(){
$mainframe=& JFactory::getApplication();

$abonnement = $mainframe->getUserState("amap_abonnement", NULL);
$ida = $mainframe->getUserState("amap_ida", 0);

if($abonnement != NULL && $ida > 0){
$database = &JFactory::getDBO();

$query = " SELECT *
FROM amap_abonnementadherent
WHERE IDA = ".$ida."
AND NomAbonnement = '".$abonnement['Nom']."'
AND Statut = 'Abonne'";

$database->setQuery($query);
$database->query(); if($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}

if($database->getNumRows() > 0){
return TRUE;
}
}
return FALSE;
}

// renvoie VRAI si le panier de l'adhérent a été adopté
function panierAdAdopte($date){
$mainframe=& JFactory::getApplication();

$abonnement = $mainframe->getUserState("amap_abonnement", NULL);
$ida = $mainframe->getUserState("amap_ida", 0);

if($abonnement != NULL && $ida > 0){
$database = &JFactory::getDBO();

// requête vérifiant que le panier orphelin n'a pas été adopté
$query = " SELECT IDA
FROM amap_orphelin
WHERE IDA = ".$ida."
AND IDAadoptant > 0
AND Statut = 1
AND NomAbonnement = '".$abonnement['Nom']."'
AND Date = '".$date."'";

$database->setQuery($query);
$database->query(); if($database->getErrorNum()){echo 'Error '.$database->getErrorNum().': '.$database->getErrorMsg().'<Br />';}

return ($database->getNumRows() != 0);
}

return FALSE;
}

// renvoie le commentaire d'un abonnement particulier
function adComAbo($ida){
$mainframe=& JFactory::getApplication();

$abonnement = $mainframe->getUserState("amap_abonnement", NULL);

if($abonnement != NULL){
$database = &JFactory::getDBO();

$query = "SELECT Commentaire FROM amap_abonnementadherent WHERE IDA = ".$ida." AND NomAbonnement = '".$abonnement['Nom']."'";
$database->setQuery($query);
$database->query();

$resultat = $database->loadAssocList();

return $resultat[0]['Commentaire'];
} else {
return NULL;
}

}

// renvoie le tableau de composition des distributions à venir
function listeEquipes(){
$mainframe=& JFactory::getApplication();

$abonnement = $mainframe->getUserState("amap_abonnement", NULL);

$tableau = NULL;
if($abonnement != NULL){

$database = &JFactory::getDBO();

// on récupère toutes les dates de distributions à venir
$query = "SELECT Date FROM amap_jourdistributionabonnement WHERE NomAbonnement = '".$abonnement['Nom']."' AND Date > NOW() ORDER BY Date ASC";
$database->setQuery($query);
$database->query(); if($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}

$datesDistrib = $database->loadAssocList();


// on récupère tous les inscrits dans les distributions à venir

// nom/prénom de l'adhérent
$subQueryNom = "SELECT CONCAT(amap_adherent.Nom,  amap_adherent.Prenom)
FROM amap_adherent
WHERE amap_adherent.IDA = amap_distribution.IDA";

// contacts téléphoniques de l'adhérent
$subQueryTel = "SELECT CONCAT(amap_adherent.Fixe, ' / ', amap_adherent.Mobile)
FROM amap_adherent
WHERE amap_adherent.IDA = amap_distribution.IDA";

// valeur minimale du role
$subQueryMin = "SELECT MIN(Role) FROM amap_distribution WHERE amap_distribution.NomAbonnement = '".$abonnement['Nom']."' AND amap_distribution.Date = DateA";

$subQueryStatut = "SELECT IF(amap_distribution.Role = 0, 'Responsable', IF(amap_distribution.Role = (".$subQueryMin."), 'Responsable (provisoire)', ''))";

$query = " SELECT Date AS 'DateA', (".$subQueryNom.") AS 'Nom', (".$subQueryTel.") AS 'Tel', (".$subQueryStatut.") as 'Statut'
FROM amap_distribution
WHERE NomAbonnement = '".$abonnement['Nom']."'
AND Date > NOW()
AND Statut = 'Inscrit'";

$database->setQuery($query);
$database->query(); if($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}

$equipiers = $database->loadAssocList();

$tableau[0][0] = 'Date';

// header du tableau
for($i = 1 ; $i <= $abonnement['NombreEquipiers'] ; $i++){
$tableau[0][$i] = 'Equipier '.$i;
}

$i = 1; // compteur d'équipe
// pour chaque distribution de l'abonnement
foreach($datesDistrib as $row1){
$tableau[$i][0] = $row1['Date'];

$nb = 0; // compte le nombre d'équipier valides

// pour chaque equipiers inscrit dans l'abonnement
foreach($equipiers as $row2){

// on regarde si son inscription correspond à la distribution actuellement passé en revue
if($row2['DateA'] == $row1['Date']){

// c'est le cas donc on recopie les informations relatives à l'adhérent
$tableau[$i][$nb + 1] = $row2['Nom'];

$nb++;
}
}
// blancs à la place des slots d'équipiers vides
for($j = 0 ; $j < ($abonnement['NombreEquipiers'] - $nb) ; $j++){
$tableau[$i][$nb+1+$j] = '';
}

$i++;
}
}
return $tableau;
}

// renvoie quelques statistiques concernant les inscriptions en équipe de distribution
function statsInscEquipe($ida, &$nbInscAd, &$moyNbInsc){
$mainframe=& JFactory::getApplication();

$abonnement = $mainframe->getUserState("amap_abonnement", NULL);

if($abonnement != NULL && $ida > 0){
$database = &JFactory::getDBO();

// nombre d'inscriptions effectués par l'adhérent
$subQueryNbInscAd = " SELECT COUNT(*)
FROM amap_distribution
WHERE IDA = ".$ida."
AND NomAbonnement = '".$abonnement['Nom']."'
AND Statut = 'Inscrit'";

// nombre d'abonnements
$subQueryNbAbo = " SELECT IF(COUNT(*) > 0, COUNT(*), 1)
FROM amap_abonnementadherent
WHERE NomAbonnement = '".$abonnement['Nom']."'";

// nombre total d'inscriptions en équipe de distribution (seulement adhérent abonné)
$subQueryNbInsc = " SELECT COUNT(*)
FROM amap_distribution
WHERE NomAbonnement = '".$abonnement['Nom']."'
AND Statut = 'Inscrit'
AND IDA IN(SELECT IDA FROM amap_abonnementadherent WHERE NomAbonnement = '".$abonnement['Nom']."')";

// nombre moyen effectués par tous les adhérents
$subQueryMoyNbInsc = "SELECT (".$subQueryNbInsc.")/(".$subQueryNbAbo.")";

$query = "SELECT (".$subQueryNbInscAd."), (".$subQueryMoyNbInsc.")";

$database->setQuery($query);
$database->query(); if($database->getErrorNum()) {exit( 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />');}

$resultat = $database->loadRowList();

$nbInscAd = $resultat[0][0];
$moyNbInsc = $resultat[0][1];
}
}



/////////////////////////// import de cette fonction de mod_amap
//// renvoie la liste des prochaines distributions, tous abonnements confondus, limité aux 2 prochains
function getprodistri($limit,$id_joomla,$id_amap, $datedefinie) {
$mainframe=& JFactory::getApplication();
$database = &JFactory::getDBO();
$data = NULL;
$numAbo=0;

//reduire au panier de l'adherent et non pas a tous les adherents
//20131126BM condition rajoutée pour pouvoir faire la liste de pointage avec la meme fonction (ajouté aussi le parametre limit
if ($id_joomla == 0 ){$id_joomla = JFactory::getUser()->get('id',0);}
//echo "idjoomla $id_joomla <br>";

// recupère les informations d'un adhérent en fonction de son indentifiant Joomla
$query = "SELECT * FROM amap_adherent where IDJ = ".$id_joomla;
$database->setQuery($query);
$database->query(); if ($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg();}
$this->adExiste = TRUE;
$mainframe->setUserState('amap_ida', $this->adherent['IDA']);

//20131126BM ajout en parametre de la fonction de id_amap
if ($id_amap == 0) {$id_amap=$this->adherent['IDA'];}

//print "<br>-------------------".$id_amap."-------------------<br>";

//20140901BM modif car prodistrildb
// $query = " SELECT *, MIN(da.Date) as NextDate
// FROM amap_abonnement a, amap_jourdistributionabonnement da
// WHERE da.NomAbonnement = a.Nom
// AND (a.Statut = 'Ouvert' OR a.Statut = 'Complet' )
// ".(($datedefinie == "")?"AND da.Date >= date(now())":"AND da.Date = '".$datedefinie."'")."
// GROUP By a.Nom
// ORDER By NextDate, a.Nom
// ";


$query = " SELECT *, MIN(da.Date) as NextDate
FROM amap_abonnement a, amap_jourdistributionabonnement da
WHERE (a.Statut = 'Ouvert' OR a.Statut = 'Complet' )
".(($datedefinie == "")?"AND da.Date >= date(now())":"AND da.Date = '".$datedefinie."'")."
GROUP By a.Nom
ORDER By NextDate, a.Nom
";
//fin20140901BM
print "\n<!--\n $query \n-->\n"; // pour voir la requète si nécessité de debug
$database->setQuery($query);
$database->query(); if ($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}
if ($database->getNumRows() != 0) {
$abonnements = $database->loadAssocList('Nom');
} else { echo "pas d'abonnement en cours"; return $data;}
foreach ($abonnements as $abonnement) {


// détermination du nombre de dossiers en cours
$query = " SELECT count(IDA) FROM amap_abonnementadherent
WHERE NomAbonnement = '".$abonnement['Nom']."'
AND Statut = 'Encours'";
$database->setQuery($query);
$database->query(); if ($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}
$encours = $database->loadResult();


// début de la requête principale poour déterminer le nombre de panier à livrer et le nombre d'orphelin
$query = " SELECT DATE_FORMAT(amap_jourdistributionabonnement.Date, '%d/%m/%Y') as Date,";
// $query = " SELECT amap_jourdistributionabonnement.Date,";

// $nbVariantes = count(listeVariantes());
$nbVariantes = 5;
$nbOptions = 10;

// sous-requêtes comptant le nombre de paniers pour chaque variante
if($nbVariantes > 0 && $abonnement['QteMax']>0){
$subQuery = NULL;
for($i = 0 ; $i < $nbVariantes ; $i++){
// compte le nombre de paniers reportés à une autre date
if ($abonnement['Variante'.($i+1)]) {
$reportsPourAutreDate = " SELECT IFNULL(SUM(amap_abonnementadherent.Quantite), 0)
FROM amap_abonnementadherent, amap_report
WHERE amap_abonnementadherent.IDA = amap_report.IDA
AND amap_abonnementadherent.NomAbonnement = '".$abonnement['Nom']."'
AND amap_abonnementadherent.Variante = '".$abonnement['Variante'.($i+1)]."'
AND amap_report.NomAbonnement = '".$abonnement['Nom']."'
AND amap_report.DateInitial = amap_jourdistributionabonnement.Date
AND amap_abonnementadherent.Statut = 'Abonne'";

// compte le nombre de panier reportés à cette date
$reportsPourCetteDate = " SELECT IFNULL(SUM(amap_abonnementadherent.Quantite), 0)
FROM amap_abonnementadherent, amap_report
WHERE amap_abonnementadherent.IDA = amap_report.IDA
AND amap_abonnementadherent.NomAbonnement = '".$abonnement['Nom']."'
AND amap_abonnementadherent.Variante = '".$abonnement['Variante'.($i+1)]."'
AND amap_report.NomAbonnement = '".$abonnement['Nom']."'
AND amap_report.DateReport = amap_jourdistributionabonnement.Date
AND amap_report.DateReport = amap_jourdistributionabonnement.Date
AND amap_abonnementadherent.Statut = 'Abonne'";

$subQuery[$i] = " SELECT IFNULL(SUM(amap_abonnementadherent.Quantite), 0) - (".$reportsPourAutreDate.") + (".$reportsPourCetteDate.")
FROM amap_abonnementadherent
WHERE amap_abonnementadherent.NomAbonnement = '".$abonnement['Nom']."'
AND amap_abonnementadherent.Variante = '".$abonnement['Variante'.($i+1)]."'
AND amap_abonnementadherent.Statut = 'Abonne'
AND amap_jourdistributionabonnement.Date <= amap_abonnementadherent.derniereDistribution
AND amap_jourdistributionabonnement.Date >= amap_abonnementadherent.premiereDistribution";
//echo 'Variante'.($i+1).': '.$abonnement['Variante'.($i+1)].'<br />';
}
}
foreach($subQuery as $cle => $valeur){
$query = $query.' ('.$valeur.') AS \''.$abonnement['Variante'.($cle+1)].'\',';
}
}

// sous-requêtes comptant le nombre de paniers pour chaque options

if($nbOptions > 0 ){
$subQuery = NULL;
for($i = 0 ; $i < $nbOptions ; $i++){
// compte le nombre de paniers reportés à une autre date
if ($abonnement['Option'.($i+1)]) {
$reportsPourAutreDate = " SELECT IFNULL(SUM(amap_abonnementadherent.QuantiteOption".($i+1)."), 0)
FROM amap_abonnementadherent, amap_report
WHERE amap_abonnementadherent.IDA = amap_report.IDA
AND amap_abonnementadherent.NomAbonnement = '".$abonnement['Nom']."'
AND amap_report.NomAbonnement = '".$abonnement['Nom']."'
AND amap_report.DateInitial = amap_jourdistributionabonnement.Date
AND amap_abonnementadherent.Statut = 'Abonne'";

// compte le nombre de panier reportés à cette date
$reportsPourCetteDate = " SELECT IFNULL(SUM(amap_abonnementadherent.QuantiteOption".($i+1)."), 0)
FROM amap_abonnementadherent, amap_report
WHERE amap_abonnementadherent.IDA = amap_report.IDA
AND amap_abonnementadherent.NomAbonnement = '".$abonnement['Nom']."'
AND amap_report.NomAbonnement = '".$abonnement['Nom']."'
AND amap_report.DateReport = amap_jourdistributionabonnement.Date
AND amap_abonnementadherent.Statut = 'Abonne'";

$subQuery[$i] = " SELECT IFNULL(SUM(amap_abonnementadherent.QuantiteOption".($i+1)."), 0) - (".$reportsPourAutreDate.") + (".$reportsPourCetteDate.")
FROM amap_abonnementadherent
WHERE amap_abonnementadherent.NomAbonnement = '".$abonnement['Nom']."'
AND amap_abonnementadherent.IDA='".$id_amap."'

AND amap_abonnementadherent.Statut = 'Abonne'
AND amap_jourdistributionabonnement.Date <= amap_abonnementadherent.derniereDistribution
AND amap_jourdistributionabonnement.Date >= amap_abonnementadherent.premiereDistribution";
//echo 'Variante'.($i+1).': '.$abonnement['Variante'.($i+1)].'<br />';
$query = $query.' ('.$subQuery[$i].') AS \''.$abonnement['Option'.($i+1)].'\',';
}
}

}

// sous-reqûete comptant le nombre de paniers orphelins
$subQuery = " SELECT COUNT(*)
FROM amap_orphelin
WHERE amap_orphelin.Date = amap_jourdistributionabonnement.Date
AND IDAadoptant = 0
AND Statut = 1
AND amap_orphelin.NomAbonnement = '".$abonnement['Nom']."'";
$query = $query.' ('.$subQuery.') AS \'Orphelins\',';



// sous-reqûete comptant le nombre d'inscrits a la permanance
$subQuery = " SELECT COUNT(*)
FROM amap_distribution
WHERE amap_distribution.Date = amap_jourdistributionabonnement.Date
AND Statut = 'Inscrit'
AND amap_distribution.NomAbonnement = '".$abonnement['Nom']."'";



//$subQuery = "SELECT Nom FROM amap_adherent where amap_adherent.IDA = ANY ( SELECT IDA FROM amap_distribution WHERE amap_distribution.Date = amap_jourdistributionabonnement.Date AND Statut = 'Inscrit' AND amap_distribution.NomAbonnement = '".$abonnement['Nom']."')";







$query = $query.' ('.$subQuery.') AS \'Nb\'';



// clause FROM et WHERE de la requête principale
$query = $query." FROM amap_jourdistributionabonnement
WHERE amap_jourdistributionabonnement.NomAbonnement = '".$abonnement['Nom']."'
AND amap_jourdistributionabonnement.date >= date(now())
ORDER By amap_jourdistributionabonnement.date
LIMIT $limit"; ;
// récupère toutes les distributions de l'abonnement en cours de traitement avec le nombre de panier pour chaque variante
//print "\n<!--\n $query \n-->\n"; // pour voir la requète si nécessité de debug

$database->setQuery($query);
$database->query(); if($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}


if($database->getNumRows() > 0){
// $data[$abonnement['Nom']] = array('abonnement'=>$abonnement,'distrib'=>$database->loadAssoc(),'encours'=>$encours);

$data[$abonnement['Nom']] =$database->LoadAssocList();
//$data[$abonnement['Nom']] =$database->LoadObjectList();
}
}
return $data;
}
//////////////////////////// fin import de mod_amap



///////////// fonctions pour gesstion de carte
// from a string containing a direction, will return an array with lon and lat
// not used for now since we use google maps service
function addressToCoord($address)
{
$lon="";
$lat="";
$address = urlencode($address);
$string = file_get_contents("http://nominatim.openstreetmap.org/search?q=$address&format=xml");
$xml=simplexml_load_string($string);
foreach($xml->place[0]->attributes() as $a => $b)
{
if ($a == "lat")
$lat = (string)$b;
if ($a == "lon")
$lon = (string)$b;
}

return (array($lon, $lat));
}

// retoure un tableau avec la liste des adhérents qui ont coché
//l'option "carte du voisinage", avec lon, lat, nom, adresse, téléphone
function getVoisinageInfo()
{
$mainframe=& JFactory::getApplication();
$database = &JFactory::getDBO();
$data = Array();

$query = " SELECT Nom, Prenom, Email, Fixe, Mobile, Adresse, CP, Ville, lat, lon
FROM amap_adherent
WHERE PublicationAdresse = '1'
";

$database->setQuery($query);
$database->query(); if ($database->getErrorNum()) {echo 'Error ' .
$database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}
if ($database->getNumRows() != 0) {
foreach($database->loadRowList() as $i)
if ($i[8]!="" and $i[9]!="")
$data[] = Array("Nom"=>$i[0],
"Prenom"=>$i[1],
"Email"=>$i[2],
"Fixe"=>$i[3],
"Mobile"=>$i[4],
"Adresse"=>$i[5],
"CP"=>$i[6],
"Ville"=>$i[7],
"lat"=>$i[8],
"lon"=>$i[9]);
}
return $data;

}






}
// ************************************ fonction d'affichage

// ************************************ formulaires ************************************
class formulaire {
var $fields;
var $task;
var $view;
var $titre;
var $texte;
var $submittext;

function affiche() {
//echo '<div class="componentheading">'.$this->titre.'</div>';
if(isset($this->titre)){
echo '<h3 class="amap_titre">'.$this->titre.'</h3>';
}
echo '<form id="actionForm" method="post" action="index.php?option=com_amap">';
//echo '<table class="actionTable" align="center" border="0" cellpadding="0" cellspacing="2">';
echo '<input type="hidden" name="option" value="com_amap">'; // pour retourner dans le composant
echo '<input type="hidden" name="task" value="'.$this->task.'">'; // la tache à traiter
if (isset($this->view)) { echo '<input type="hidden" name="view" value="'.$this->view.'">';} // la vue à afficher

if(isset($this->texte) && $this->texte != ''){
echo '<tr><p>'.$this->texte.'</p></tr>';
}

// initialisation, on considère que le tableau de mise en forme n'a pas été ouvert et qu'il n'y a pas de fieldset
$table = FALSE;
$fieldset = FALSE;

foreach ($this->fields as $field) { // affichage des champs

$value = ""; // Valeur par défaut
if(isset($field['value'])){
$value = $field['value'];
}

// groupement de champs
// le tableau qui met en forme le formulaire doit être à l'intérieur du fieldset pour un affichage correct
if($field['type'] == 'fieldset'){
// s'il y a déjà un tableau de commencé alors on le ferme
if($table){
echo '</table>';
$table = FALSE;
}
echo '<fieldset class="amap_fieldset">';
echo '<legend>'.$field['legend'].'</legend>';
$endfield = $field['endfield'];
echo '<table border="0" cellpadding="0" cellspacing="2">';
$fieldset = TRUE;
}

// s'il n'y a pas de fieldset alors on utilise quand même un tableau
if(!$fieldset && !$table){
echo '<table border="0" cellpadding="0" cellspacing="2">';
$table = TRUE;
}

if($field['type'] == 'hidden'){
// champ invisible
echo '<input type="hidden" name="'.$field['name'].'" value="'.$value.'">';
} else {
// message d'erreur

if(isset($field['libelle'])){
echo '<tr><td align="left" title="'.$field['libelle'].' : ">';

if($field['type'] != 'checkbox'){
echo '<nobr>'.$field['libelle'].' </nobr>';
}
echo '</td>';
}
echo '<td>';
// champ de texte
if ($field['type'] == 'text'){
echo '<input';
if(isset($field['errmsg'])){
echo ' class="amap_erreur"';
}
echo ' type="text" name="'.$field['name'].'" size="'.$field['size'].'" value="'.$value.'">';
/*
if(isset($field['obli']) && $field['obli']){
echo ' *';
}*/
}



// champ de texte multiligne
if($field['type'] == 'textarea'){
echo '<textarea name="'.$field['name'].'" rows="'.$field['rows'].'" cols="'.$field['cols'].'">'.$value.'</TEXTAREA>';
}
// liste déroulante
if($field['type'] == 'select'){
echo '<select name="'.$field['name'].'" size="'.$field['size'].'">';
// options du menu déroulant
foreach($field['options'] as $option){
if(isset($field['disabled']) && in_array($option, $field['disabled'])){
/* WORKAROUND POUR IE : au lieu d'utiliser l'attribut disabled dans un option,
on utilise un optgroup vide afin d'empêcher la sélection de l'item
*/
if(dateValide($option)){
echo '<optgroup label="'.fdate($option).'"></optgroup>';
} else {
echo '<optgroup label="'.$option.'"></optgroup>';
}
} else {
echo '<option value="'.$option.'" ';
// choix sélectionné
if($field['value'] == $option){
echo "selected=selected ";
}

if(dateValide($option)){
echo'>'.fdate($option).'</option>';
} else {
echo'>'.$option.'</option>';
}
}
}
echo '</select>';
}

// case à cocher
if($field['type'] == 'checkbox'){
echo '<input type="checkbox" name="'.$field['name'].'" value=1 ';
// coché ou non par défaut
if($field['value'] == 1){
echo "checked=checked";
}
echo '>'.$field['libelle'];
}

if (isset($field['errmsg'])){
echo '<nobr><em class="amap_small">'.$field['errmsg'].'</em></nobr>';
}

echo '</td>';

// si un fieldset doit être fermé
if(isset($endfield) && isset($field['name'])) {
if($field['name'] == $endfield){
echo '</table>';
echo '</fieldset>';
$fieldset = FALSE; // fin du fieldset
}
}

}
}
// si une table n'a pas encore été fermé
if($table){
echo '</table>';
}
echo '<table><tr><td align="center" colspan="2" >';
echo '<button type="submit" alt="'.$this->submittext.'" title="'.$this->submittext.'">'.$this->submittext.'</button>';
echo '</td></table>';
echo '</form>';
}

function getval($name){
return $this->fields[$name]['value'];
}
}

// renvoie le tableau des variantes de l'abonnement en cours de traitement
function listeVariantes() {
$mainframe=& JFactory::getApplication();

$abonnement = $mainframe->getUserState("amap_abonnement");

$listeVariantes = NULL;
for($i = 0 ; $i < 10 ; $i++){
if($abonnement['Variante'.($i+1)] != NULL && $abonnement['Variante'.($i+1)] != ''){
$listeVariantes[$i] = $abonnement['Variante'.($i+1)];
}
}

return $listeVariantes;
}

// renvoie le tableau des options de l'abonnement en cours de traitement
function listeOptions() {
$mainframe=& JFactory::getApplication();

$abonnement = $mainframe->getUserState("amap_abonnement", NULL);

$listeOptions = NULL;
for($i = 0 ; $i < 10 ; $i++){
if($abonnement['Option'.($i+1)] != NULL && $abonnement['Option'.($i+1)] != ''){
$listeOptions[$i] = $abonnement['Option'.($i+1)];
}
}

return $listeOptions;
}

// renvoie le tableau des quantités maximum pour chaque options de l'abonnement en cours de traitement
function qteMaxOptions() {
$mainframe=& JFactory::getApplication();

$abonnement = $mainframe->getUserState("amap_abonnement");

$qteMaxOptions = NULL;
for($i = 0 ; $i < 10 ; $i++){
$qteMaxOptions[$i] = $abonnement['QteMaxOption'.($i+1)];
}

return $qteMaxOptions;
}

// renvoie la description de l'abonnement en cours de traitement
function descriptionAbonnement(){
$mainframe=& JFactory::getApplication();
$abonnement = $mainframe->getUserState("amap_abonnement");

$texte = ' <table class="amap_encadre">
<tr align="center">
<th>Produit</th>
<th>Producteur</th>
<th>Livraison</th>
<th>Lieu</th>
</tr>
<tr align="center">
<td>'.$abonnement['Produit'].'</td>
<td>'.$abonnement['Societe'].'</td>
<td>'.$abonnement['Periodicite'].'</td>
<td>'.$abonnement['Lieu'].'</td>
</tr>
</table>';

return $texte;
}

// renvoie les renseignement sur l'état des abonnements
function etatAbonnements(){
$mainframe=& JFactory::getApplication();
$abonnement = $mainframe->getUserState("amap_abonnement");

$database = &JFactory::getDBO();

$query = "SELECT (SELECT COUNT(*) FROM amap_abonnementadherent WHERE Statut = 'Abonne' AND NomAbonnement = '".$abonnement['Nom']."') AS 'Abonnes',
(SELECT COUNT(*) FROM amap_abonnementadherent WHERE Statut = 'Encours' AND NomAbonnement = '".$abonnement['Nom']."') AS 'EnAttente',
(SELECT COUNT(*) FROM amap_abonnementadherent WHERE Statut = 'Liste' AND NomAbonnement = '".$abonnement['Nom']."') AS 'SurListe'";

$database->setQuery($query);
$database->query(); if($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}

$Abonnes = 0;
$EnAttente = 0;
$SurListe = 0;

if($database->getNumRows() > 0){
$resultat = $database->loadAssocList();

$Abonnes = $resultat[0]['Abonnes'];
$EnAttente = $resultat[0]['EnAttente'];
$SurListe = $resultat[0]['SurListe'];
$Total = $Abonnes + $EnAttente + $SurListe;
}

$query = " SELECT *
FROM amap_jourdistributionabonnement
WHERE NomAbonnement = '".$abonnement['Nom']."'
ORDER BY Date ASC";

$database->setQuery($query);
$database->query(); if($database->getErrorNum()) {echo 'Error ' . $database->getErrorNum() . ': ' . $database->getErrorMsg().'<br />';}

$nbDistribRestantes = 0;
$prochaineDistrib = NULL;
if($database->getNumRows() > 0){
$resultat = $database->loadAssocList();

$date = date("Y-m-d");
foreach($resultat as $cle => $row){
if($nbDistribRestantes > 0){
$nbDistribRestantes++;
}
if($nbDistribRestantes == 0 && $row['Date'] > $date){
$prochaineDistrib = $row['Date'];
$nbDistribRestantes++;
}
}
}

$texte = ' <table class="amap_encadre">
<tr>
<td>
<p>';
if($abonnement['NombreMinAdherent'] != NULL || $abonnement['NombreMaxAdherent'] != NULL){
if($abonnement['NombreMinAdherent'] != NULL && $abonnement['NombreMaxAdherent'] != NULL){
$texte .= 'L\'agriculteur a précisé qu\'il fallait <strong>entre '.$abonnement['NombreMinAdherent'].' et '.$abonnement['NombreMaxAdherent'].' abonnés</strong> aux distributions.';
} else {
if($abonnement['NombreMinAdherent'] != NULL){
$texte .= 'L\'agriculteur a précisé qu\'il fallait <strong>au minimum '.$abonnement['NombreMinAdherent'].' abonnés</strong> pour effectuer les distributions.';
}
if($abonnement['NombreMaxAdherent'] != NULL){
$texte .= 'L\'agriculteur a précisé qu\'il <strong>ne pouvait pas y avoir plus de '.$abonnement['NombreMinAdherent'].' abonnés</strong> aux distributions.';
}
}
}
$texte .= ' A ce jour il y a <strong>'.$Total.'</strong> demande(s) d\'abonnement dont <strong>'.$Abonnes.'</strong> validé(s), <strong>'.$SurListe.'</strong> sur liste d\'attente et <strong>'.$EnAttente.'</strong> en attente de validation.
</p>
<p>
Il reste <strong>'.$nbDistribRestantes.'</strong> distribution(s) pour cet abonnement. La prochaine est le <strong>'.fdate($prochaineDistrib).'</strong>.
</p>
</td>
</tr>
</table>';

//20140419BM
$texte="";
return $texte;
}


// ************************************ tableaux ************************************
function afficheHeader() {
// echo '</td></tr></table>';
}

function afficheFooter() {
// echo '<table class="nopad"><tr valign="top"><td>';
}

class tableau {

var $header; // tableau contenant l'en-tête du tableau
var $table; // données (cellules) du tableau
var $colCaches; // colonne qui ne doivent pas apparaitre
var $commandes; // tableau des commandes (boutons dans la dernière colonne)

var $idtab; // identifiant pour distinguer chaque tableau (utile lors des tris)

var $critereTri; // sur quelle colonne s'effectue le critère de tri ?
var $ordreTri; // ordre de tri type SQL (ASC/DESC)

var $url; // sur quel url se trouve le tableau

var $surlignage; // permet de mettre en valeur une ligne qui contient une valeur indiqué

function afficheTable() {

print "<table class='amap_tableau' border='1'>\n";

//affichage du titre (la première ligne)
print "<tr style='background-color: #0096D2; color: white;' width='100%'>\n";
foreach($this->header as $cle => $headerCell) {
// est-ce que le tableau est trié ?
if(isset($this->critereTri) && isset($this->ordreTri)) {
print "<th class='amap_header' width='".$this->largeur[$cle]."%'>";
print '<a class="amap_headerLink" href="'.$this->url.'&amp;idtab='.$this->idtab.'&amp;critere='.($cle+1).'&amp;ordre='.(($this->ordreTri == 'asc')? 'desc' : 'asc').'">';
print '<p>'.$headerCell.'</p>';
if(($cle + 1) == $this->critereTri) {
print '<img src="components/com_amap/images/'.$this->ordreTri.'.png" />';
}
print '</a>';
print "</th>\n";

// sinon afficher sans possibilité de tri
}
else {
print '<th class="amap_header" width="'.$this->largeur[$cle].'%">'.$headerCell.'</th>';
}
}

// affiche ou non la cellule vide de la colonne commande
if(isset($this->commandes)) {
print '<td></td>';
}
print '</tr>';

// affichage du tableau
$parite=0;
foreach($this->table as $row) {
print "<tr class='amap_beautableau'>\n";

$i = 0;
// affichage de chaque cellule
//~ $opt = explode("<br>", $row[0]); $row[0] = "NULL";
//~ $qtt = explode("<br>", $row[1]); $row[1] = "NULL";
//~ $tmp = "";
//~ for ($j=1;$j<=sizeof($opt);$j++) {
//~ if ($qtt[$j] != "0" AND $qtt[$j] != "") {
//~ $tmp .= $opt[$j]." : ".$qtt[$j]."<br>";
//~ echo $j." - ";
//~ }
//~ }
//~ $row[0] = $tmp;
//~ echo $tmp;
foreach($row as $key=>$cell) {
if(dateValide($cell)) {
print "<td>".fdate($cell)."</td>\n";
}
else {
print "<td valign='top'>".$cell."</td>\n";
}
$i++;
}

if(isset($this->commandes)) {
// affichage des boutons à la fin de la ligne
print "<td align='center' valign='middle' width='80'>";
foreach ($this->commandes as $commande) {
print '<a href="'.$commande['href'];
// liste des paramètres
if(isset($commande['param'])) {
foreach($commande['param'] as $cle => $valeur) {
print '&amp;'.$cle.'='.$row[$valeur];
}
}
print '">'; # fin du <a>
// icone ou texte
if(isset($commande['icone'])) {
if(isset($commande['title'])) {
$title = $commande['title'];
}
else {
$title = 'Préférences';
}
print '&nbsp;<img width="36" border="0" title="'.$title.'" src="components/com_amap/images/'.$commande['icone'].'" >';
}
elseif(isset($commande['texte'])) {
print $commande['texte'];
}
print '</a>';
}
print "</td>\n";
print "</tr>\n";
}
}
print "</table>\n";
}
}

// ************************************ général ************************************
// définit un message utilisant la classe JApplication de Joomla
function message($message, $type = 'message'){
$app = &JFactory::getApplication();
$app->enqueueMessage($message, $type);
}

// envoie un email
function envoyerCourriel($destinataire, $sujet, $message) {
// Pour envoyer un mail HTML, l'en-tête Content-type doit être défini
$entete = 'MIME-Version: 1.0' . "\r\n";
//20140510BM
$entete .= 'Content-type: text/html; charset=iso-8859-1' . "\n";
//$entete .= 'Content-type: text/html; charset=UTF-8' . "\n";
// Penser à creer un mail de réception des mails (ou à mettre le mail de la ML de l'AMAP... à voir) du genre webmaster@amapluydebearn.org
$entete .= 'From : admin@amapluydebearn.org' . "\n";

$sujet = mb_encode_mimeheader('[AMAP Luy de béarn] '.$sujet);
//20140510BM meta rajouté
$message = '<html>
<body style="font-family:Arial;">
<p>'
.$message.'<br />----------<br />Ceci est un message automatique, n\'y répondez pas.
</p>
</body>
</html>';

$message = utf8_decode($message);

return mail($destinataire, $sujet, $message, $entete);
}

// retourne un tableau sans l'élément e du tableau tab
function supprElement($tab, $e){
foreach($tab as $cle => $val){
if($val != $e){$res[$cle] = $tab[$cle];}
}
return $res;
}

// fonction qui retourne un tableau associatif contenant chaque élément d'une date au format suivant :
// aa-mm-jj hh-mm-ss
function analyseDate($date){

$len = strlen($date);
$tableau = array('année', 'mois', 'jour', 'heure', 'minute', 'seconde');

$i = 0;
foreach($tableau as $type){
$tampon = NULL;
$j = 0;
while($i < $len && $date[$i] != '-' && $date[$i] != ':' && $date[$i] != ' '){
$tampon[$j] = $date[$i];
$i++;
$j++;
}
$i++;

$resultat[$type] = implode($tampon);
}
return $resultat;
}

// remplace fputcsv
function ecritLigneCSV($handle, $row, $sep){
$nbCellules = count($row);

$i = 0;
foreach($row as $valeur){
$valeur = utf8_decode($valeur);

if(is_string($row[$i])){
fwrite($handle, '"'.$valeur.'"');
} else {
fwrite($handle, $valeur);
}

if($i < $nbCellules - 1){
fwrite($handle, $sep);
}
$i++;
}
fwrite($handle, "\n");
}

// créer un fichier CSV avec l'extension XLS
function exportExcel($donnees){
$handle = fopen('components/com_amap/export.csv', 'w');

if(is_writable('components/com_amap/export.csv')){
foreach($donnees as $row){
ecritLigneCSV($handle, $row, chr(9));
}
fclose($handle);

header('Content-Description: File Transfer');
header('Content-Type: plain/text; charset=utf-8');
header("Content-Disposition: attachment; filename=export.csv");
header('Content-Transfer-Encoding: binary');
header("Expires: 0");
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize('components/com_amap/export.csv'));
ob_clean();
flush();
readfile('components/com_amap/export.csv');
exit();
} else {
message("Impossible de créer le fichier. Veuillez réessayer dans un moment.");
}
}

// ecrit une page HTML pour le rapport
//20131204BM ajout de 2 parametres
function exportHTML($donnees,$datel,$contrat_nom){
echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
echo '<html>';
echo '<head>
<title>Rapport de la livraison du '.$datel.' '. $contrat_nom.'</title>
<link rel="stylesheet" href="http://www.amapluydebearn.org/components/com_amap/css/amap.css" type="text/css" />
</head>
<body>';
echo "Livraison du $datel - $contrat_nom<br>";
echo '<table class="amap_rapport">';

foreach($donnees as $row){
echo '<tr>';
foreach($row as $cell){
if(!isset($flag)){
echo '<th height>'.$cell.'</th>';

} else {
echo '<td height="38px">'.$cell.'</td>';
}
}
$flag = TRUE;
echo '</tr>';
}
echo '</table>';
echo '</body></html>';
exit();
}
//20140415BM
function exportPDF($donnees,$datel,$contrat_nom){
// echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
$html= '<html>';
$html.= '<head>
<title>Rapport de la livraison du '.$datel.' '. $contrat_nom.'</title>
<link rel="stylesheet" href="http://www.amapluydebearn.org/components/com_amap/css/amap.css" type="text/css" />
</head>
<body>';
//ajout d'une ligne en haut du rapport sur demande de Jean-Marie
$html.='<strong><br>Rapport de la livraison du '.$datel.' pour le contrat '. $contrat_nom.'</strong><br>';
$html.= '<table class="amap_rapport">';

foreach($donnees as $row){
$html.= '<tr>';
foreach($row as $cell){
if(!isset($flag)){
$html.= '<th height>'.$cell.'</th>';

} else {
$html.= '<td height="38px">'.$cell.'</td>';
}
}
$flag = TRUE;
$html.= '</tr>';
}
$html.= '</table>';
$html.= '</body></html>';

//$html .= $contenu;

require_once JPATH_LIBRARIES . '/tcpdf/tcpdf.php';

// Load the Language module (if you need it)

require_once JPATH_LIBRARIES . '/tcpdf/config/lang/fra.php';
//echo "toto";

// create new PDF document
//$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf = new TCPDF('P', PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Amap Luy de Béarn');
$pdf->SetTitle('TCPDF Liste');
$pdf->SetSubject('TCPDF Differentes listes');
$pdf->SetKeywords('TCPDF, PDF, liste, pointage, AMAP Luy de Béarn');

// set default header data
//$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 001', PDF_HEADER_STRING, array(0,64,255), array(0,64,128));
$pdf->setFooterData($tc=array(0,64,0), $lc=array(0,64,128));

// set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));

// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

//set margins
$pdf->SetMargins(PDF_MARGIN_LEFT-5, PDF_MARGIN_TOP-25, PDF_MARGIN_RIGHT-5);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

$pdf->setPrintHeader(false);
$pdf->setPrintFooter(false);

//set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

//set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

//set some language-dependent strings
$pdf->setLanguageArray($l);

// ---------------------------------------------------------

// set default font subsetting mode
$pdf->setFontSubsetting(true);
// Set font
// dejavusans is a UTF-8 Unicode font, if you only need to
// print standard ASCII chars, you can use core fonts like
// helvetica or times to reduce file size.
$pdf->SetFont('helvetica', '', 10, '', true);

// Add a page
// This method has several options, check the source code documentation for more information.
$pdf->AddPage();

// set text shadow effect
$pdf->setTextShadow(array('enabled'=>true, 'depth_w'=>0.2, 'depth_h'=>0.2, 'color'=>array(196,196,196), 'opacity'=>1, 'blend_mode'=>'Normal'));

// Set some content to print
//echo $html;
// Print text using writeHTMLCell()

ob_clean();
$pdf->writeHTMLCell($w=0, $h=0, $x='', $y='', $html, $border=0, $ln=1, $fill=0, $reseth=true, $align='', $autopadding=true);

// ---------------------------------------------------------

// Close and output PDF document
// This method has several options, check the source code documentation for more information.
ob_clean();
$nom="liste".$datel.$contrat_nom.".pdf";
$pdf->Output("$nom", 'D');
exit();
}





function exportHTMLtoFileldb($donnees){
$fp = fopen('/var/www/site.amapluydebearn.org/components/com_amap/tmp/toto.html', 'w');

//echo "<br>------------------fp $fp";
fwrite($fp, '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">');
fwrite ($fp, '<html>');
fwrite($fp, '<head>
<title>Rapport de la distribution</title>
<link rel="stylesheet" href="http://www.amapluydebearn.org/components/com_amap/css/amap.css" type="text/css" />
</head>
<body>');
fwrite($fp,'<table class="amap_rapport">');

foreach($donnees as $row){
fwrite($fp, '<tr>');
foreach($row as $cell){
if(!isset($flag)){
fwrite($fp, '<th height>'.$cell.'</th>');

} else {
fwrite($fp, '<td height="38px">'.$cell.'</td>');
}
}
$flag = TRUE;
fwrite($fp, '</tr>');
}
fwrite($fp,'</table>');
fwrite($fp, '</body></html>');
// exit();
return;
}

// recopie un tableau
function copierTableau($arr){
foreach($arr as $cle => $valeur){
$res[$cle] = $valeur;
}
return $res;
}

// formate correctement une date
function fdate($date){
return date("d/m/Y", strtotime($date));
}

// vérifie d'une date est valide
function dateValide($date){
$valide = FALSE; // par défaut on supposes que la date n'est pas valide

$arr = explode('-', $date, 3);

if(count($arr) == 3){
list($annee, $mois, $jour) = $arr;

if(strlen($annee) == 4 && strlen($mois) == 2 && strlen($jour) == 2){
if(!empty($annee) && !empty($mois) && !empty($jour)){
if(checkdate($mois , $jour, $annee)){
$valide = TRUE;
}
}
}
}

return $valide;
}

// formate correctement un numéro de téléphone
function FormatPhone($phone) {
$phone = ereg_replace ("[-_/ \.]", "", $phone);
$phone = substr($phone, 0, 10);
return preg_replace("#(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})#", "$1 $2 $3 $4 $5", $phone);
}

// formate correctement les noms des adhérents
//~ Gestion de deux possiblités en entrée :
//~ - soit les noms et les prénoms sont distincts et entrés en arg1 et arg2
//~ - soit les noms et prénoms ont été concaténés en amont et envoyé en arg1 ... seul impératif les noms/prénoms doivent être séparés par le signe ø
function FormatNomsAdh($noms, $prenoms) {
if ($prenoms == "") list($noms, $prenoms) = explode ("ø", $noms);
$ns = explode("/", $noms);
$ps = explode("/", $prenoms);
$tmp = "";
foreach ($ns as $k2=>$value) {
$tmp .= ucfirst(strtolower($ns[$k2]))." ".ucfirst(strtolower($ps[$k2]))."<br>";
}
return substr($tmp, 0, -4);
}

/////////////////////////////////////////

function listePointage($date)
{
$user =& JFactory::getUser();

//if (!$user->guest) {
// echo 'You are logged in as:<br />';
// echo 'User name: ' . $user->username . '<br />';
// echo 'Real name: ' . $user->name . '<br />';
// echo 'User ID : ' . $user->id . '<br />' ;
//}

$db=&JFactory::getDBO();
$query="select amap_adherent.IDJ, amap_adherent.IDA, amap_adherent.Nom, amap_adherent.Prenom from amap_adherent, amap_livraison where amap_livraison.IDA = amap_adherent.IDA and amap_livraison.Date='".$date."'";


$db->setQuery($query);
$db->query($query);
$liste=$db->loadAssocList();
//print_r($liste1);
return $liste;
}

function listeLivraisonsldb()
{
$db=&JFactory::getDBO();
$query="select distinct Date from amap_jourdistributionabonnement WHERE Date >= CURDATE() ORDER BY Date ASC LIMIT 4;";
$db->setQuery($query);
$db->query($query);
$listelivraisons=$db->loadAssocList();
//print_r($listelivraisons);
return $listelivraisons;
}

function listeadherentsvalidesldb()
{
//20140408BM restriction de la liste d'adhérents à la période 'courant' car sinon la liste pointage général affiche des lignes pour tous les adherents
// cherche la période d'adhésion courante
$db=&JFactory::getDBO();
$query="SELECT Periode FROM amap_periodeadhesion WHERE Statut='courant'";
$db->setQuery($query);
$db->query($query);
$courante=$db->loadResult();

//20140318BM rajout de GROUP BY amap_adherent.IDA pour adherents valides sur plusieurs périodes de contrats (car pb de doublons dans les listes de pointages)
$db=&JFactory::getDBO();
$query="SELECT *
FROM amap_adherent
INNER JOIN amap_adhesion
ON
amap_adherent.IDA=amap_adhesion.IDA
AND Periode='$courante'
WHERE
amap_adhesion.Statut='V'
GROUP BY amap_adherent.IDA
ORDER BY amap_adherent.Nom,amap_adherent.Prenom ";
$db->setQuery($query);
$db->query($query);
$listeadherents_v=$db->loadAssocList();
//print_r($listelivraisons);
return $listeadherents_v;
}

function listecontrats_ouvertsldb()
{
$db=&JFactory::getDBO();
$query="SELECT *
FROM amap_abonnement
WHERE
amap_abonnement.Statut='Ouvert' ORDER BY amap_abonnement.Nom";
$db->setQuery($query);
$db->query($query);
$listecontrats_ouverts=$db->loadAssocList();
//print_r($listelivraisons);
return $listecontrats_ouverts;
}


//retourne liste des $nombre prochaines dates de livraison pour la $periodicite
function listedateslivraisons_ldb($periodicite,$nombre)
{
$db=&JFactory::getDBO();
//$query="SELECT distinct date,nomAbonnement from amap_jourdistributionabonnement inner join amap_abonnement on amap_jourdistributionabonnement.nomAbonnement=amap_abonnement.nom where date >curdate() and Periodicite='$periodicite' order by date, Periodicite LIMIT 40";
$query="SELECT distinct date from amap_jourdistributionabonnement inner join amap_abonnement on amap_jourdistributionabonnement.nomAbonnement=amap_abonnement.nom where date >= curdate() and Periodicite='$periodicite' order by date LIMIT $nombre";

$db->setQuery($query);
$db->query($query);
$datesl=$db->loadAssocList();

//print_r($listelivraisons);
return $datesl;
}

function listenomlivraisons_ldb($periodicite)
{
$db=&JFactory::getDBO();
$query = "SELECT distinct nom from amap_abonnement where Periodicite='$periodicite'";
$db->setQuery($query);
$db->query($query);
$noms_livraisons=$db->loadAssocList();
return $noms_livraisons;
}


//retourne qui est inscrit pour une livraison pour un contrat (hebdomadaire) a une date donnée
//un seul inscrit possible mis dans la table des contrats sinon pb
function inscrit_livraison_producteur($date,$contrat)
{
$db=&JFactory::getDBO();

//select amap_distribution.IDA, amap_adherent.nom,amap_adherent.prenom from amap_distribution INNER JOIN amap_adherent ON amap_adherent.IDA=amap_distribution.IDA where amap_distribution.statut='Inscrit' and Date="2013-12-12" and NomAbonnement="2014 : Legumes";

$query="select amap_distribution.IDA, amap_adherent.nom,amap_adherent.prenom,amap_adherent.IDJ from amap_distribution INNER JOIN amap_adherent ON amap_adherent.IDA=amap_distribution.IDA where amap_distribution.statut='Inscrit' and Date='$date' and NomAbonnement='$contrat';";
$db->setQuery($query);
$db->query($query);
$qui=$db->loadAssocList();
//print_r($listelivraisons);
return $qui;
}
function contratPDF($html,$nom_contrat)
{
// Create new PDF document
require_once JPATH_LIBRARIES . '/tcpdf/tcpdf.php';

// Load the Language module (if you need it)

require_once JPATH_LIBRARIES . '/tcpdf/config/lang/fra.php';
//echo "toto";

// create new PDF document
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
// set document information
$pdf->SetCreator(PDF_CREATOR);
$pdf->SetAuthor('Bernard Maynadier');
$pdf->SetTitle('contrat ou liste');
$pdf->SetSubject('TCPDF Tutorial');
$pdf->SetKeywords('TCPDF, PDF, example, test, guide');

// set default header data
//$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 001', PDF_HEADER_STRING, array(0,64,255), array(0,64,128));
$pdf->setFooterData($tc=array(0,64,0), $lc=array(0,64,128));

// set header and footer fonts
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));

// set default monospaced font
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);

//set margins
//20140914BM pour enlever la marge du haut
//$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetMargins(PDF_MARGIN_LEFT, 1, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
//$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
$pdf->SetFooterMargin(8);
//set auto page breaks
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);

//set image scale factor
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);

//set some language-dependent strings
$pdf->setLanguageArray($l);

// ---------------------------------------------------------

// set default font subsetting mode
$pdf->setFontSubsetting(true);
// Set font
// dejavusans is a UTF-8 Unicode font, if you only need to
// print standard ASCII chars, you can use core fonts like
// helvetica or times to reduce file size.
//20140914 remplacé 8 par 7 pour la police a cause des contrats viande bovine
$pdf->SetFont('helvetica', '', 8, '', true);

// Add a page
// This method has several options, check the source code documentation for more information.
$pdf->AddPage();

// set text shadow effect
/////$pdf->setTextShadow(array('enabled'=>true, 'depth_w'=>0.2, 'depth_h'=>0.2, 'color'=>array(196,196,196), 'opacity'=>1, 'blend_mode'=>'Normal'));

// Set some content to print
//echo $html;
// Print text using writeHTMLCell()

ob_clean();
$pdf->writeHTMLCell($w=0, $h=0, $x='', $y='', $html, $border=0, $ln=1, $fill=0, $reseth=true, $align='', $autopadding=true);

// ---------------------------------------------------------

// Close and output PDF document
// This method has several options, check the source code documentation for more information.
ob_clean();
//$pdf->Output('example_001.pdf', 'D');
$nom_contrat=$nom_contrat.".pdf";
$pdf->Output($nom_contrat, 'D');
exit();
}

?>
